Я не могу скомпилировать этот пример примера веб-сервера mongoose

Краткое введение:- (GCC версии 4.6.3, OS-Ubuntu 12.04, работающая вокруг программы веб-сервера mongoose, поэтому, когда я запускаю команду "make" для компиляции и установки mongoose, она отлично справилась с задачей).

[Часть 1 вопроса] Этот вопрос относится к этому сообщению о stackowerflow.

веб-сервер mongoose программа helloworld

Валенок ответил на этот пост, дав ссылку на пример программы.

в основном, я пытаюсь скомпилировать пример программного кода, приведенного по этой ссылке: -

http://code.google.com/p/mongoose/source/browse/examples/hello.c

и поместите этот код в уже скомпилированный каталог mongoose.(в каталоге есть файл mongoose.h)

Ниже приведен вывод командной строки для моей компиляции привет программы.

akshay@akshay-Inspiron-N5010:~$ gcc mongoose/hello.c -o mongoose/hello
/tmp/ccroC5Z6.o: In function `callback':
hello.c:(.text+0x32): undefined reference to `mg_get_request_info'
hello.c:(.text+0x96): undefined reference to `mg_printf'
/tmp/ccroC5Z6.o: In function `main':
hello.c:(.text+0xee): undefined reference to `mg_start'
hello.c:(.text+0x103): undefined reference to `mg_stop'
collect2: ld returned 1 exit status
akshay@akshay-Inspiron-N5010:~$ 

[Часть 2 вопроса]

Теперь я нахожу реализации mg_stop, mg_start,mg_printf и mg_get_request_info в файле mongoose.c, поэтому я компилирую файл mongoose.c с параметром -c как: gcc -c -o mongoose.o mongoose.c

Я думаю, что мой вопрос похож на: -

неопределенная ссылка на функцию, объявленную в файле *.h

но затем, когда я связываю libmongoose.so с опцией -L на gcc, я получаю следующие ошибки:- (libmongoose.so присутствует в той же директории, мой cwd)

akshay@akshay-Inspiron-N5010:~/mongoose$ gcc -L libmongoose.so -o hello hello.o mongoose.o
mongoose.o: In function `mg_start_thread':
mongoose.c:(.text+0x1369): undefined reference to `pthread_create'
mongoose.o: In function `load_dll':
mongoose.c:(.text+0xa955): undefined reference to `dlopen'
mongoose.c:(.text+0xa9b4): undefined reference to `dlsym'
collect2: ld returned 1 exit status

Кроме того, я продолжаю получать ошибки выше ^^ при компиляции без использования libmongoose.so

[EDIT]: добавлена ​​опция -pthread на gcc, все еще отображаются ошибки:- mongoose.o: в функции load_dll': mongoose.c:(.text+0xa955): undefined reference todlopen' mongoose.c:(.text+0xa9b4): неопределенная ссылка на `dlsym' collect2: ld вернул 1 состояние выхода

Для части 1 и части 2 моего вопроса: я хочу избавиться от этих ошибок и успешно запустить пример программы hello.c. Заранее спасибо.

1 ответ

Решение

-L опция не используется для связи с библиотекой, она используется для указания пути поиска для динамических библиотек. Чтобы связать с определенной библиотекой, используйте -l, Тем не менее, вам не нужно связывать оба mongoose.o а также libmongoose.soлибо одного достаточно.

В Linux вы также должны ссылаться на pthread и библиотеку динамической загрузки, потому что, несмотря на то, что они являются частью стандартной библиотеки C, их нет в libc.so, Еще одна вещь, на которую следует обратить внимание, это то, что последние версии binutils (в частности, ld) требуют, чтобы библиотеки и объектные файлы были указаны в том порядке, в котором символы зависят друг от друга, т.е. библиотеки должны идти до конца командной строки.

В общем, используйте одну из следующих команд:

gcc -o hello hello.o mongoose.o -ldl -lpthread

или же

gcc -L. -o hello hello.o -lmongoose -ldl -lpthread
Другие вопросы по тегам