Неопределенная ссылка на 'event_base_del_virtual' при компиляции примера контроллера libfluid - PullRequest
0 голосов
/ 08 октября 2018

Я пытаюсь использовать libfluid для кодирования моего собственного контроллера OpenFlow.Но сначала я хочу собрать образец контроллера , чтобы понять, как это работает.Я получил следующую ошибку при компиляции примера контроллера: (это ошибка, которую я получил, когда я пытаюсь make msg_controller)

c++ msg/MsgController.cc -lfluid_msg -lfluid_base -I. -O3 -std=c++0x -o msg_controller
/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib/libfluid_base.so: undefined reference to `event_base_del_virtual'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib/libfluid_base.so: undefined reference to `event_base_add_virtual'
collect2: error: ld returned 1 exit status
Makefile:10: recipe for target 'msg_controller' failed
make: *** [msg_controller] Error 1

Перед сборкой контроллера образца я выполняю шаги , чтобысборка libfluid_base и libfluid_msg.При создании этих двух библиотек я получил следующую подсказку, которая, по моему мнению, может быть полезна для решения моей проблемы

Если вам когда-нибудь захочется установить связь с установленными библиотеками в данном каталоге, LIBDIR, вы должны либоиспользуйте libtool и укажите полный путь к библиотеке или используйте флаг '-LLIBDIR' во время компоновки и выполните по крайней мере одно из следующих действий:

  • добавьте LIBDIR к переменной окружения 'LD_LIBRARY_PATH' во времявыполнение
  • добавить LIBDIR в переменную окружения 'LD_RUN_PATH' во время компоновки
  • , использовать флаг компоновщика '-Wl, -rpath -Wl, LIBDIR'
  • , добавить системного администратораLIBDIR to '/etc/ld.so.conf'

См. Любую документацию операционной системы о разделяемых библиотеках для получения дополнительной информации, такой как справочные страницы ld (1) и ld.so (8).

Является ли неопределенная ошибка ссылки, потому что библиотека неправильно связывается?Нужно ли внести некоторые изменения в команду c ++?

Я пробовал команду grep -rn "event_base_del" /usr/lib, а также grep -rn "event_base_add" /usr/lib

Вывод для event_base_del ниже (то же самое для * 1036)*)

Binary file /usr/lib/libfluid_base.a matches
Binary file /usr/lib/libfluid_base.so.0.0.0 matches
Binary file /usr/lib/x86_64-linux-gnu/libevent.a matches
Binary file /usr/lib/x86_64-linux-gnu/libevent-2.1.so.6.0.2 matches
Binary file /usr/lib/x86_64-linux-gnu/libevent_core.a matches
Binary file /usr/lib/x86_64-linux-gnu/libevent_core-2.1.so.6.0.2 matches

Значит ли это, что он правильно связывается?поскольку libfluid_base.so - это просто ссылка на libfluid_base.so.0.0.0

lrwxrwxrwx  1 root root       22 Oct  8 09:36 libfluid_base.so -> libfluid_base.so.0.0.0

Так как я могу это исправить?

После того, как я попытался использовать -levent_core или -levnet, чтобы получить пример кода для ссылки наLibevent.Ошибка продолжает существовать, возможно, потому, что используемая мной сейчас версия libevent несовместима с текущей версией libfluid. Таким образом, я использую Ubuntu18.04.

Я постараюсь собрать еена Ubuntu16.04 с более старой версией libevent посмотрите, работает ли он.

1 Ответ

0 голосов
/ 08 октября 2018

event_base_del_virtual взято из библиотеки libevent .Свяжите это с -levent_core.

...