2013-03-09 108 views
4

我无法使用ZeroMQ API编译内置示例hwserver.c。我已尽全力。使用zmq API编译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。

感谢,

萨姆

+0

我做了答案,但downvoted这个问题,因为它确实是一个常见问题 – 2013-03-09 15:08:24

回答

18

的参数以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程序(例如你的项目由多个源文件和一些头文件组成),你就需要一个构建器基础结构,比如GNU make(一个非常常见的构建器;您可以尝试使用omake)。

另请参阅this answer到相关的问题。

+0

谢谢。有效!!! – Sam 2013-03-09 14:58:53

0

再试

gcc hwserver.c -o hwserver -lzmq 

你参数的顺序不正确。