使用zmq API编译C代码

时间:2013-03-09 14:52:32

标签: 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

任何帮助都非常感激。

谢谢,

萨姆

2 个答案:

答案 0 :(得分:20)

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

尝试

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

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

阅读-o hwserver文档,特别是有关invoking GCC

的章节

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

不要忘记调试信息标记-Wextra:您需要使用-g调试程序来调试程序。

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

只要您想开发真正大小的C程序(即您的项目由多个源文件和一些头文件组成),您就需要一个构建器基础结构,例如GNU make(非常通用构建器;您可以尝试使用omake

另请参阅this answer相关问题。

答案 1 :(得分:0)

再试一次

gcc hwserver.c -o hwserver -lzmq

您的参数顺序不正确。