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