c++ - ZeroMQ 编译在 Windows 上使用 gcc/g++ 失败

标签 c++ gcc g++ zeromq

我有 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,随便)。

(在前面的例子中你做对了。)

略读the documentation .

关于c++ - ZeroMQ 编译在 Windows 上使用 gcc/g++ 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54181254/

相关文章:

c++ - 如果对象没有默认构造函数并且我不允许在其类定义中创建一个对象,我该如何将对象放入节点中?

c++ - 实现 Eigen 库伪逆函数的 MEX 文件崩溃

c++ - C 多行宏问题 : why not use if(1){. ..} 而不是多行宏定义中的 do{...}while(0)

c++ - 简单的 OpenGL 应用程序

c++ - 我可以使用相同的名称为周围范围内的类型声明一个成员类型别名吗?

c++ - C++中常量整数赋值如何

C++ winapi-单击按钮上的新线程导致 fatal error

c++ - if-else if 梯形图和编译器优化

c - gcc: 无法从目标文件创建 .so

c++ - 为什么默认情况下初始化局部变量?