我正在尝试使用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‘标志,并至少执行以下操作之一:
有关共享库的任何操作系统文档都可以获得更多信息,如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.By不兼容,就像我使用Ubuntu18.04那样。
我将尝试在ubuntu16.04上构建它,并使用旧版本的libevent,看看它是否有效。
https://stackoverflow.com/questions/52704269
复制相似问题