编译 libfluid 样本控制器时对"event_base_del_virtual"的未定义引用
Undefined reference to 'event_base_del_virtual' when compiling libfluid sample controller
我正在尝试使用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。
我将尝试使用旧版本的libevent在ubuntu16.04上构建它,看看它是否有效。
event_base_del_virtual
来自libevent库。将其与-levent_core
链接。
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 构造函数采用 Base&不被调用
- 将sharet_ptr<Derived>转换为shared_ptr<Base>
- 将 BASE 派生类存储在同一容器中
- 避免矢量中的对象切片<Base><shared_ptr>
- 从 std<Derived>::shared_ptr 的向量返回 std::shared_ptr<Base>
- 如何从unique_ptr返回unique_ptr的引用<Derived><Base>?
- 当初始值设定项是基类名时'initializer does not name a non-static data member or base class'错误
- 如何将unique_ptr<derived>*转换为<base>unique_ptr*?
- <Base> <Derived> 具有相同原始指针共享引用的 shared_ptr 和 shared_ptr 实例是否计数?
- 从 Base 引用对象调用派生类的成员
- 两个成员,在Base中默认初始化,可能在Derived中非默认初始化
- 从"<Base>std::unique_ptr"创建"ClassType<std::unique_ptr>"时出现编译错误<Derived>
- C++ - 打印派生类对象的矢量<base*> 元素
- 为什么在此示例中从unique_ptr自动向上转换<derived>到unique_ptr<base>失败?
- 如何在派生类中不显式调用base::func()的情况下从基类执行虚拟函数
- Visual Studio MFC C++ "CFormView" "base class"下拉列表中缺少
- 尝试应用肖恩父母谈话"inheritance is the base class of evil"中的模式
- 派生对象调用的 Base 方法的模板推导
- 为什么unique_ptr<Derived>隐式投射到unique_ptr<Base>?