链接共享库libdvbv5,未定义引用

时间:2018-11-15 14:55:50

标签: c++ linker shared-libraries undefined-reference

我正在使用libdvbv5库,但是在编译程序时遇到问题。

我在/ usr / local / include中有头文件,在/ usr / local / lib中有libdvbv5.so。

代码非常简单:

#include "libdvbv5/dvb-dev.h"

void doSatTest() {
    struct dvb_device *dvb;
    struct dvb_dev_list *dvb_dev;

    dvb = dvb_dev_alloc();
}

eclipse索引器对头文件“ dvb-dev.h”中存在函数“ dvb_dev_alloc”感到满意,并且该文件可以编译但在链接上失败

我已停止使用eclipse构建器,因此我可以简化构建命令并查明正在发生的事情。

我尝试使用以下命令进行编译和链接:

g++ sat_test.cpp -ldvbv5

但是它失败了:

sat_test.cpp:(.text+0x1f): undefined reference to `dvb_dev_alloc()'

我想念什么?

1 个答案:

答案 0 :(得分:1)

问题在于libdvbv5/dvb-dev.h没有提供正确的C++原型,您将其包含在.cpp文件中。

解决方法是这样做:

extern "C" {
#include "libdvbv5/dvb-dev.h"
}
... rest as before.

使用上述修复程序,您的程序将正常链接。

更详细的说明here