我有 2 个程序相互通信:在 Linux 上运行的 GO 编写的“服务器”和在 Windows 上用 C++ 编写的“客户端”。
我有 3 个文件:
zmq.h
libzmq-v120-mt-4_0_4.lib
libzmq-v120-mt-4_0_4.dll
客户端是来自http://zguide.zeromq.org/c:hwclient的例子它在 linux 上使用命令行编译得很好:
g++ zmq.h client.cpp -lzmq
我可以使用 Visual Studio 并链接 *.lib 文件在具有 x64 体系结构的 Windows 上编译该程序。不过,要运行该程序,我需要将 *.dll 文件放在输出目录中,但这没关系。
问题是我不想使用 Visual Studio IDE,而是使用 gcc 或 g++。无论我尝试什么,我总是会遇到这些错误
C:\..\client>g++ zmq.h main.cpp -L libzmq-v120-mt-4_0_4.lib
..\ccQafArl.o:main.cpp:(.text+0x1c): undefined reference to `__imp_zmq_ctx_new'
..\ccQafArl.o:main.cpp:(.text+0x35): undefined reference to `__imp_zmq_socket'
..\ccQafArl.o:main.cpp:(.text+0x50): undefined reference to `__imp_zmq_connect'
..\ccQafArl.o:main.cpp:(.text+0x91): undefined reference to `__imp_zmq_send'
..\ccQafArl.o:main.cpp:(.text+0xb1): undefined reference to `__imp_zmq_recv'
..\ccQafArl.o:main.cpp:(.text+0xd8): undefined reference to `__imp_zmq_close'
..\ccQafArl.o:main.cpp:(.text+0xe8): undefined reference to `__imp_zmq_ctx_destroy'
collect2.exe: error: ld returned 1 exit status
看起来 g++ 找不到 *.lib 文件,但是 VS 如何编译没有错误?我每次都尝试了 TDM-GCC-32、TDM-GCC-64 和 mingw64 g++,结果都一样。 ZeroMQ 是使用 Windows 安装程序安装的,而不是从源代码安装的。
如何在不使用 Visual Studio 的情况下使其在 Windows 上编译?
最佳答案
这不是链接库的方式。
首先,您使用的是 -L
,它指定库搜索路径,而不是库。
您正在寻找 -l
,这需要一个名称,而不是文件名。
所以:
-l lzmq-v120-mt-4_0_4
链接器应自动搜索具有适合该平台的正确前缀和正确扩展名的匹配文件(.so
、.a
、.lib
,随便)。
(在前面的例子中你做对了。)
关于c++ - ZeroMQ 编译在 Windows 上使用 gcc/g++ 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54181254/