编译简单的hello world ZeroMQ C示例,编译标志是什么?

14

我正在尝试从zeromq教程编译示例hello_world.c: http://zguide.zeromq.org/page:all#Ask-and-Ye-Shall-Receive 我相当确定我已经在OSX Mountain Lion上安装了所有必需的组件。

clang -Wall hwserver.c -o hwserver

给我一个错误:

Undefined symbols for architecture x86_64:  
"_zmq_bind", referenced from:  
  _main in hwserver-OgrEe6.o  
"_zmq_ctx_new", referenced from:  
  _main in hwserver-OgrEe6.o  
"_zmq_msg_close", referenced from:  
  _main in hwserver-OgrEe6.o  
"_zmq_msg_data", referenced from:  
  _main in hwserver-OgrEe6.o  
"_zmq_msg_init", referenced from:  
  _main in hwserver-OgrEe6.o  
"_zmq_msg_init_size", referenced from:  
  _main in hwserver-OgrEe6.o  
"_zmq_msg_recv", referenced from:  
  _main in hwserver-OgrEe6.o  
"_zmq_msg_send", referenced from:  
  _main in hwserver-OgrEe6.o  
"_zmq_socket", referenced from:  
  _main in hwserver-OgrEe6.o  
ld: symbol(s) not found for architecture x86_64  
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我在C语言方面经验不是很丰富。不确定是否应该为zmq动态链接库或头文件添加编译器标志,或者我的$PATH设置有误。

在/usr/local/lib中:

libzmq.3.dylib
libzmq.a
libzmq.dylib
libzmq.la

并且在 /usr/local/include 中:

zmq.h
zmq_utils.h

并且输出 $PATH:

/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/lib/:/usr/local/include/
1个回答

30

你在问题中列出了ZeroMQ库,但实际上没有通过链接使用它们。将命令行更改为此:

clang -Wall hwserver.c -o hwserver -L/usr/local/lib -lzmq

额外参数的解释:

  • -L/usr/local/lib 告诉链接器将路径 /usr/local/lib 添加到库搜索路径中。
  • -lzmq 告诉库链接到 zmq 库。

$PATH 环境变量与此无关,它只是告诉 shell 在哪里查找命令。


2
我想补充一点,链接器参数需要位于 hwserver.c -o hwserver 之后。 - nnnmmm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接