c++ - 链接共享库 libdvbv5, undefined reference

标签 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()'

我错过了什么?

最佳答案

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

解决办法是这样做:

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

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

更详细的解释here .

关于c++ - 链接共享库 libdvbv5, undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53322164/

相关文章:

c++ - 缺少共享库(g++ 编译)

linux -/usr/bin/ld : client: hidden symbol `__dso_handle'

c++ - 错误的函数调用 "IOCTL_DISK_GET_DRIVE_LAYOUT_EX"

c++ - 从一个文件中读取多个 jpg 图像

c++ - C++11 中一个好的 std::string 跨平台 UTF8 替代品?

c++ - 将 libxml++ 和 glib 库与适用于 C++ Windows 的 CodeBlocks IDE 链接的问题

c++ - 使用自定义构建的 gcc 时程序链接失败

linux - 有什么办法可以直接修改二进制文件的SONAME吗?

c++ - 调用单例库

c++ - 这是gcc的错误吗?