【问题标题】:Undefined reference to 'event_base_del_virtual' when compiling libfluid sample controller编译 libfluid 示例控制器时对“event_base_del_virtual”的未定义引用
【发布时间】:2018-10-08 14:16:50
【问题描述】:

我正在尝试使用 libfluid 编写我自己的 OpenFlow 控制器。但首先我想构建sample controller 来了解它是如何工作的。 编译示例控制器时出现以下错误:(这是我尝试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

在构建示例控制器之前,我按照steps 构建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/libgrep -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 上构建它,看看它是否有效。

【问题讨论】:

  • grep -rn "event_base_del" YOUR_REPO 并查看此方法的定义位置。然后验证您是否将代码与由符号组成的适当单元链接到该方法。
  • 我尝试了这个命令并更新了我的帖子。它似乎链接到正确的库但仍然未定义的引用?

标签: c++ openflow


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-05-30
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    • 2023-03-10
    • 1970-01-01
    • 2016-04-25
    • 2021-03-31
    相关资源
    最近更新 更多