2013-03-09 5 views
4

Мне не удалось скомпилировать встроенный пример hwserver.c с использованием API-интерфейсов ZeroMQ. Я старался изо всех сил.Компиляция кода C с использованием zmq API

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 

Я использую ZeroMQ-3.2.2 на Ubuntu-12,10

Любая помощь очень ценна.

Спасибо,

-Sam

+0

Я ответил только на вопрос, потому что это действительно FAQ –

ответ

18

Порядок аргументов 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-программы реального размера (т. Е. Ваш проект из нескольких исходных файлов и некоторых файлов заголовков [s]), вам понадобится инфраструктура строителя, например GNU make (очень общий строитель; вы можете попробовать omake).

См. Также this answer.

+0

Спасибо. Это сработало!!! – Sam

0

снова попробовать

gcc hwserver.c -o hwserver -lzmq 

Ваш заказ параметров неверен.

Смежные вопросы