编译 libfluid 样本控制器时对"event_base_del_virtual"的未定义引用

Undefined reference to 'event_base_del_virtual' when compiling libfluid sample controller

本文关键字:base del 引用 未定义 virtual event 样本 libfluid 控制器 编译      更新时间:2023-10-16

我正在尝试使用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_baselibfluid_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。

我将尝试使用旧版本的libevent在ubuntu16.04上构建它,看看它是否有效。

event_base_del_virtual来自libevent库。将其与-levent_core链接。