Я пытаюсь использовать 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 в /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
ниже (то же самое для event_base_add
)
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 и посмотреть, работает ли он.
event_base_del_virtual
происходит от библиотека ливент. Свяжите это с -levent_core
,
Других решений пока нет …