我无法使用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
任何帮助都非常感激。
谢谢,
萨姆
答案 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
您的参数顺序不正确。