C ++ код с использованием libnet не компилируется - PullRequest
0 голосов
/ 28 сентября 2011

Я пытаюсь скомпилировать скрипт libnet и получаю эту ошибку:

[root@whyme]# gcc -Wall `libnet-config --defines` mysocket.cc -o mysocket `libnet-config --libs` -lpcap -lnet
/tmp/ccUPbuVg.o: In function `main':
mysocket.cc:(.text+0x1e): undefined reference to `net_init'
mysocket.cc:(.text+0x2a): undefined reference to `net_loadconfig'
mysocket.cc:(.text+0x35): undefined reference to `net_detectdrivers'
mysocket.cc:(.text+0x40): undefined reference to `net_initdrivers'
mysocket.cc:(.text+0x54): undefined reference to `net_openconn'
mysocket.cc:(.text+0x83): undefined reference to `net_listen'
mysocket.cc:(.text+0xbe): undefined reference to `net_poll_listen'
mysocket.cc:(.text+0xd2): undefined reference to `net_closeconn'
mysocket.cc:(.text+0xf1): undefined reference to `net_receive_rdm'
mysocket.cc:(.text+0x11b): undefined reference to `net_query_rdm'

Я не вставил свой код, потому что похоже, что он связан со связыванием объектов.

Ответы [ 2 ]

0 голосов
/ 28 сентября 2011

Я могу скомпилировать и выполнить этот исходный файл с вашей точной командой (изменяя только имена файлов): https://github.com/repolho/Libnet-1.1-tutorial-examples/blob/master/01_init.c

Поэтому я подозреваю, что проблема в вашем источнике в конце концов. Большинство имен функций libnet имеют форму libnet_ [funcname], но в ваших ошибках компоновщика я вижу имена вида net_ [funcname].

Также отмечу, что вы вручную вставили -lnet. В моей системе -lnet - это весь вывод libnet-config --libs, поэтому, если вам это нужно, указание его вручную является излишним. Это не вредно, но в следующий раз вы можете ввести меньше символов. :)

0 голосов
/ 28 сентября 2011

Не могли бы вы проверить, что возвращает "libnet-config --libs"?

Возможно, он что-то возвращает не так, что мешает компоновщику найти библиотеку libnet. Убедитесь, что часть с надписью «-L XXXX» указывает на каталог, в котором находится библиотека libnet.

...