我无法使用ZeroMQ API编译内置示例hwserver.c.我尽力了.
gcc -lzmq hwserver.c -o hwserver
Run Code Online (Sandbox Code Playgroud)
它提示我:
 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
Run Code Online (Sandbox Code Playgroud)
我在ubuntu-12.10上使用zeromq-3.2.2
任何帮助真的很感激.
谢谢,
萨姆
Bas*_*tch 22
参数的顺序gcc确实很重要.
尝试
 gcc -Wall -g hwserver.c -lzmq -o hwserver
Run Code Online (Sandbox Code Playgroud)
首先需要警告和优化或调试标志(例如,-Wall对于所有警告,-g用于调试信息),然后是可选的预处理器标志(比如-D或者-I你没有它们),然后是源文件,最后是库-lzmq(顺序是相关:从高级库到低级库)和输出选项-o hwserver(可能在其他地方).
阅读gcc文档,特别是关于调用GCC的章节.
不要忘记-Wall:你真的想得到所有的警告,你应该改进你的代码,直到没有给出警告.你甚至可以想要-Wextra获得更多额外的警告.
不要忘记调试信息标志-g:您需要使用gdb调试器来调试程序.
稍后,使用-O或-O2优化二进制程序(编译器将生成更高效但可调试性更低的机器代码).只有在调试程序时才关心它.
一旦你想开发真正大小的C程序(即你的项目由几个源文件和一些头文件[s]组成),你就需要一个构建器基础结构,比如GNU make(一个非常常见的构建器;你可以尝试omake代替).
另见相关问题的答案.