2012-09-18 25 views
11

Intentando compilar el ejemplo hello_world.c del tutorial de zeromq: http://zguide.zeromq.org/page:all#Ask-and-Ye-Shall-Receive Estoy bastante seguro de que tengo todo instalado en OSX Mountain Lion.Compilar simple hello world Ejemplo ZeroMQ C, compilar indicadores?

clang -Wall hwserver.c -o hwserver 

me da un error:

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) 

que no soy el más experimentado en C. No estoy seguro si estoy seguro que a añadir una bandera compilador para el dylib ZMQ o encabezados o de ser mi $ PATH apagado.

en// local/lib usr:

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

y en/usr/local/include:

zmq.h 
zmq_utils.h 

y echo $ PATH:

/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/lib/:/usr/local/include/ 

Respuesta

22

Usted enumera la ZeroMQ bibliotecas en su pregunta, pero en realidad no enlace con ellos. Cambiar la línea de comandos para esto:

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

Explicación de los argumentos adicionales:

  • -L/usr/local/lib le indica al enlazador para agregar una ruta (/usr/local/lib) a la ruta de búsqueda de biblioteca.
  • -lzmq le dice a la biblioteca que vincule con la biblioteca zmq.

La variable de entorno $PATH no tiene nada que ver con esto, simplemente le dice al shell dónde buscar los comandos.

+0

Podría agregar que los argumentos del enlazador deben ubicarse después del 'hwserver.c -o hwserver'. – nnnmmm