Я пытаюсь использовать 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 посмотрите, работает ли он.