2013-04-16 4 views
1

Я новичок в Mosquitto и я завязывания написать простой клиент C при подключении к тестовому серверу Mosquitto в: http://test.mosquitto.org/Ссылка Mosquitto с GCC на OSX

Вот код простого клиента C, который составляет 99,9% от пример найти на сайте Mosquitto в: http://pastie.org/private/orwicqjfjz8g8biurznca

EDIT 1:

Я последовал за комментарии и написал Makefile вместо делать

gcc -o test test.c 

Makefile, выглядит следующим образом:

CC = gcc 
CFLAGS = -I 
DEPS = mosquitto.h 

LIBS = -llibmosquitto 

%.o: %.c $(DEPS) 
    $(CC) -c -o [email protected] $< $(CFLAGS) 

make: test.c 
    $(CC) -m32 -Wall -o [email protected] $^ $(CFLAGS) $(LIBS) 

.PHONY: clean 

Это выход я получаю, который, как представляется, некоторые проблемы связывая mosquitto ЛИЭС с GCC:

Undefined symbols for architecture i386: 
    "_mosquitto_connect", referenced from: 
    _main in cc6Blyda.o 
    "_mosquitto_connect_callback_set", referenced from: 
    _main in cc6Blyda.o 
    "_mosquitto_destroy", referenced from: 
    _main in cc6Blyda.o 
    "_mosquitto_lib_cleanup", referenced from: 
    _main in cc6Blyda.o 
    "_mosquitto_lib_init", referenced from: 
    _main in cc6Blyda.o 
    "_mosquitto_log_callback_set", referenced from: 
    _main in cc6Blyda.o 
    "_mosquitto_loop", referenced from: 
    _main in cc6Blyda.o 
    "_mosquitto_message_callback_set", referenced from: 
    _main in cc6Blyda.o 
    "_mosquitto_new", referenced from: 
    _main in cc6Blyda.o 
    "_mosquitto_subscribe", referenced from: 
    _my_connect_callback in cc6Blyda.o 
    "_mosquitto_subscribe_callback_set", referenced from: 
    _main in cc6Blyda.o 
ld: symbol(s) not found for architecture i386 
collect2: ld returned 1 exit status 
make: *** [make] Error 1 

ПРИМЕЧАНИЕ: Я использовал доморощенного установить mosquitto так путь к библиотеке:

/usr/local/Cellar/mosquitto/1.1/ 

Цените любую помощь !!

С уважением

+1

Вы должны сказать GCC, чтобы связать с libmosquitto для того, чтобы быть в состоянии найти функции mosquitto , –

+1

Похоже, вы * скомпилированы * хорошо. Связывание с другой стороны ... – WhozCraig

ответ

1

Я решил проблему, связывающую некоторой экспериментальной ошибки в моей Makefile.

Это как конечный Makefile выглядит, не дает никаких Linking проблем:

CC = gcc 

LIBS = -lmosquitto 

%.o: %.c 
    $(CC) -c -o [email protected] $< 

make: test.c 
    $(CC) -Wall -o test $^ $(LIBS) 

.PHONY: clean 

Благодаря

+2

Библиотека 'mosquitto' была скомпилирована в режиме 64 бит, в то время как в вашей тестовой компиляции вы явно компилировались в 32-битном режиме (флаг' -m32'). Это очень распространенная проблема при построении в смешанных 32/64 бит средах, и одна из первых вещей, которую вы должны сделать, это определить, соответствует ли скомпилированный код библиотечному коду с помощью команды 'file', которая сообщит вам, является ли код x86_64, i386 или оба (которые поддерживаются в OS X) – Petesh

+0

Да, флаг '-m32' был одним из удаленных, которые заставляли его работать. Это ключ к правильной компоновке библиотек. Cheers –

+1

Рад видеть, что вы его работали, я поддерживаю пакет для комаров москитов, поэтому я рад, что это было ошибкой, которую я сделал в этом! Предполагая, что ваш код # включает mosquitto.h, вам не нужно, чтобы он был указан как DEPS в make-файле. Вы также прокомментировали строку CFLAGS, что означает, что вы можете ее удалить, а также удалить ссылки $ (CFLAGS). –

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