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

Linking shared library libdvbv5, undefined reference

提问人:uhsl_m 提问时间:11/15/2018 最后编辑:Cœuruhsl_m 更新时间:6/30/2019 访问量:292

问:

我正在使用 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()'

我错过了什么?

C++ 链接器 共享库 未定义引用

评论

0赞 Some programmer dude 11/15/2018
这是你得到的唯一信息吗?在许多 Linux 系统上,不是标准包含或库搜索路径的一部分。/usr/local
0赞 uhsl_m 11/15/2018
是的,唯一的消息,完整的消息是:/tmp/cc3BD0pW.o: In function "doSatTest()": sat_test.cpp:(.text+0x1f): undefined reference to "dvb_dev_alloc()" collect2: error: ld returned 1 exit status

答:

1赞 Employed Russian 11/16/2018 #1

问题是 没有提供适当的原型,并且您将其包含在文件中。libdvbv5/dvb-dev.hC++.cpp

解决方法是这样做:

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

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

这里有更详细的解释。