编译简单的hello world ZeroMQ C例子,编译标志?

Nic*_*ers 14 c linker dylib zeromq osx-mountain-lion

试图编译从zeromq教程中的例子hello_world.c: http://zguide.zeromq.org/page:all#Ask-and-Ye-Shall-Receive 敢肯定我已经安装在OSX山狮的一切.

clang -Wall hwserver.c -o hwserver
Run Code Online (Sandbox Code Playgroud)

给我一个错误:

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)
Run Code Online (Sandbox Code Playgroud)

我不是C中最有经验的人.不确定我是否确定要为zmq dylib或标题添加编译器标志或者我的$ PATH关闭.

在/ usr/local/lib中:

libzmq.3.dylib
libzmq.a
libzmq.dylib
libzmq.la
Run Code Online (Sandbox Code Playgroud)

并在/ usr/local/include中:

zmq.h
zmq_utils.h
Run Code Online (Sandbox Code Playgroud)

和echo $ PATH:

/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/lib/:/usr/local/include/
Run Code Online (Sandbox Code Playgroud)

Som*_*ude 29

您在问题中列出了ZeroMQ库,但实际上并未与它们链接.将命令行更改为:

clang -Wall hwserver.c -o hwserver -L/usr/local/lib -lzmq
Run Code Online (Sandbox Code Playgroud)

额外参数的解释:

  • -L/usr/local/lib告诉链接器将path(/usr/local/lib)添加到库搜索路径.
  • -lzmq告诉图书馆链接zmq库.

$PATH环境变量什么都没有做这个,它只是告诉shell在哪里寻找命令.

  • 我可能会补充说,链接器参数需要位于 `hwserver.c -o hwserver` 之后。 (2认同)