我无法使用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
真的很感谢任何人的帮助。
谢谢,
-Sam
发布于 2013-03-09 22:55:01
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 to a related question。
发布于 2013-12-23 14:04:23
再试试
gcc hwserver.c -o hwserver -lzmq您的参数顺序不正确。
https://stackoverflow.com/questions/15312034
复制相似问题