【问题标题】:Compiling C code using zmq API使用 zmq API 编译 C 代码
【发布时间】:2013-02-25 01:29:41
【问题描述】:

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

非常感谢任何帮助。

谢谢,

-山姆

【问题讨论】:

  • 我确实回答了这个问题,但否决了这个问题,因为它确实是一个常见问题解答

标签: c linker zeromq


【解决方案1】:

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 的相关问题。

【讨论】:

    【解决方案2】:

    再试一次

    gcc hwserver.c -o hwserver -lzmq
    

    您的参数顺序不正确。

    【讨论】:

      猜你喜欢
      • 2016-12-20
      • 2015-01-29
      • 2014-09-09
      • 2015-06-06
      • 2015-10-18
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多