这可能是一个Visual Studio问题,而不是其他任何问题。
我正在尝试使用VS10和ZeroMQ 2.2.0构建a 0MQ C++ example
我下载了windows sources并尝试遵循these instructions以便静态构建0MQ。具体来说:

  • 切换为发布
  • 对于解决方案中的所有7个项目:
  • General\Configuration Type设置为Static library (.lib)
  • C/C++\Code Generation\Runtime Library设置为Multi-threaded (/MT)
  • 已将ZMQ_STATIC添加到C/C++\Preprocessor\Preprocessor Definitions
  • 更新了zmq.hzmq_utils.h,以便如果定义了_MSC_VERZMQ_STATIC,那么DLL_EXPORT也将被定义

  • 此时,0MQ似乎构建良好。
  • 创建一个空的控制台项目:
  • 切换为Release
  • 通过上面的示例添加了一个cpp文件
  • random更改为rand,将srandom更改为srand,将snprintf更改为_snprintf
  • C/C++\Code Generation\Runtime Library设置为Multi-threaded (/MT)
  • ...\zeromq-2.2.0\include文件夹添加到C/C++\General\Additional Include Directories
  • 已将...\zeromq-2.2.0\builds\msvc\Release\*.lib添加到Linker\Input\Additional Dependencies

  • 但是,我仍然收到以下链接错误:
    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
    

    我错过了什么?

    最佳答案

    您也应该在“空控制台项目”中将ZMQ_STATIC添加到C/C++\Preprocessor\Preprocessor Definitions中。否则,当您编译应用程序时,ZMQ_EXPORT中的zmq.h被定义为__declspec(dllimport),因此,MSVC将寻找__imp__zmq_*符号而不是zmq_*

    关于visual-studio - 链接到VS中的静态0MQ库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10367678/

    10-12 01:03