使用 zmq API 编译 C 代码

标签 c linker zeromq

我无法使用 ZeroMQ API 编译内置示例 hwserver.c。我已经尝试了所有可能的方法。

gcc -lzmq hwserver.c -o hwserver

它提示我:

 hwclient.c:(.text+0x22): undefined reference to `zmq_ctx_new'
 hwclient.c:(.text+0x3a): undefined reference to `zmq_socket'
 hwclient.c:(.text+0x52): undefined reference to `zmq_connect'
 hwclient.c:(.text+0x94): undefined reference to `zmq_send'
 hwclient.c:(.text+0xb8): undefined reference to `zmq_recv'
 hwclient.c:(.text+0xe4): undefined reference to `zmq_close'
 hwclient.c:(.text+0xf0): undefined reference to `zmq_ctx_destroy'
 collect2: error: ld returned 1 exit status

我在 ubuntu-12.10 上使用 zeromq-3.2.2

非常感谢任何帮助。

谢谢,

-山姆

最佳答案

gcc 的参数顺序非常重要。

尝试

 gcc -Wall -g hwserver.c -lzmq -o hwserver

您首先需要警告和优化或调试标志(例如,-Wall 用于所有警告,-g 用于调试信息),然后是可选的预处理器标志(如 -D-I 但你没有它们),然后是源文件,最后是库 -lzmq (顺序是相关的:从高级库到低级库)和输出选项 -o hwserver(可以在其他地方)。

阅读gcc 文档,尤其是关于invoking GCC 的章节.

不要忘记 -Wall :您确实想要获得所有警告,并且您应该改进您的代码直到没有给出警告。您甚至可以希望 -Wextra 获得更多额外警告。

不要忘记调试信息标志 -g:您将需要使用 gdb 调试器来调试您的程序。

稍后,使用-O-O2 优化二进制程序(编译器将生成更高效但不易调试的机器码)。只有在调试程序时才关心这一点。

一旦您想开发实际大小的 C 程序(即您的项目由多个源文件和一些头文件 [s] 组成),您将需要一个构建器基础设施,例如 GNU make (一个非常常见的生成器;您可以试试 omake)。

另见 this answer一个相关的问题。

关于使用 zmq API 编译 C 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15312034/

相关文章:

c++ - 为什么一般程序一般都是从0x8000开始?

c - 在 macOS 上的链接时获取 __TEXT 部分的大小

c++ - 通过静态库进行条件链接

sockets - 使用 ZeroMQ 实现消息总线

objective-c - C中的冒泡排序降序和升序不会排序

c - C的树库

python - 用 C 和 Python 重写伪代码

c - ZeroMQ - 在接受队列中的新客户端之前向客户端发送和接收多条消息

node.js - zeromq 在与 nodejs 应用程序通信时是否提供 TCP 安全性?

c - 二维数组变量指针混淆