9

我无法使用 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

任何帮助都非常感谢。

谢谢,

-山姆

4

2 回答 2

29

参数的顺序gcc确实很重要。

尝试

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

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

阅读gcc文档,尤其是关于调用 GCC的章节。

不要忘记-Wall: 你真的想得到所有的警告,你应该改进你的代码,直到没有给出警告。您甚至可能想要-Wextra获得更多额外的警告。

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

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

只要您想开发实际大小的 C 程序(即您的项目由几个源文件和一些头文件组成),您就需要一个构建器基础架构,例如GNU make(一个非常常见的构建器;您可以尝试omake代替)。

另请参阅相关问题的答案。

于 2013-03-09T14:55:00.587 回答
0

再试一次

gcc hwserver.c -o hwserver -lzmq

您的参数顺序不正确。

于 2013-12-23T06:04:23.247 回答