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

Linking shared library libdvbv5, undefined reference

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

我在 /usr/local/include 中有 header,在 /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_alloc" 存在于 header 文件 "dvb-dev.h" 并且文件编译但在 link

上失败

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

我尝试使用以下命令编译和 link:

g++ sat_test.cpp -ldvbv5

但是它失败了:

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

我错过了什么?

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

修复方法是:

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

通过上述修复,您的程序将 link 正常。

更详细的解释here