linking to a static 0MQ library in VS

static-libraries, static-linking, visual-studio, zeromq

Solution

You should add `ZMQ_STATIC` to `C/C++\Preprocessor\Preprocessor Definitions` in your "empty console project" too. Otherwise, when you compile your application, `ZMQ_EXPORT` in `zmq.h` is defined as `__declspec(dllimport)`, and as a result, MSVC looks for `__imp__zmq_*` symbols instead of `zmq_*`

Problem

This may be a Visual Studio question more than anything else... I'm trying to build a 0MQ C++ example using VS10 and ZeroMQ 2.2.0. I downloaded the windows sources and tried to follow these instructions in order to build 0MQ statically. Specifically: - Switched to Release - For all 7 projects in the solution: - set `General\Configuration Type` to `Static library (.lib)` - set `C/C++\Code Generation\Runtime Library` to `Multi-threaded (/MT)` - added `ZMQ_STATIC` to `C/C++\Preprocessor\Preprocessor Definitions` - Updated `zmq.h` and `zmq_utils.h` so that if `_MSC_VER` and `ZMQ_STATIC` are defined then `DLL_EXPORT` will also be defined At this point 0MQ seems to build well. - Created an empty console project: - switched to Release - added a single cpp file with the example linked above - changed `random` to `rand`, `srandom` to `srand` and `snprintf` to `_snprintf` - set `C/C++\Code Generation\Runtime Library` to `Multi-threaded (/MT)` - added `...\zeromq-2.2.0\include` folder to `C/C++\General\Additional Include Directories` - added `...\zeromq-2.2.0\builds\msvc\Release\*.lib` to `Linker\Input\Additional Dependencies` However I still receive the following linking errors: ``` 1>zmqexp.obj : error LNK2001: unresolved external symbol __imp__zmq_bind 1>zmqexp.obj : error LNK2001: unresolved external symbol __imp__zmq_close 1>zmqexp.obj : error LNK2001: unresolved external symbol __imp__zmq_errno 1>zmqexp.obj : error LNK2001: unresolved external symbol __imp__zmq_init 1>zmqexp.obj : error LNK2001: unresolved external symbol __imp__zmq_msg_data 1>zmqexp.obj : error LNK2001: unresolved external symbol __imp__zmq_strerror 1>zmqexp.obj : error LNK2001: unresolved external symbol __imp__zmq_socket 1>zmqexp.obj : error LNK2001: unresolved external symbol __imp__zmq_msg_init_size 1>zmqexp.obj : error LNK2001: unresolved external symbol __imp__zmq_term 1>zmqexp.obj : error LNK2001: unresolved external symbol __imp__zmq_msg_close 1>zmqexp.obj : error LNK2001: unresolved external symbol __imp__zmq_send ``` What have I missed?

Original source

Related problems