我有两个程序相互通信:“服务器”是在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上编译没有问题:
我可以使用Visual Studio并链接*.lib文件来编译Windows x64架构的程序。但是,为了运行程序,需要将*.dll文件放在输出目录中,但这没问题。
问题在于我不想使用Visual Studio IDE,而是想使用gcc或g++。无论我尝试什么,我总是会遇到这些错误。
我有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文件来编译Windows x64架构的程序。但是,为了运行程序,需要将*.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 安装程序安装的,而不是从源代码编译安装的。
如何在 Windows 上编译而不使用 Visual Studio?
.lib
文件;不能将使用g++编译的代码链接到由MSVC编译的库中。这两种文件格式是不同的。 - M.M