c++ - g++ ld 共享库错误代码:: block

标签 c++ linux linker g++ shared-libraries

有类似的主题,但我没能在其中找到答案。

我正在使用 code::blocks IDE 构建一个测试控制台应用程序。它需要为 HD Homerun DVB 调谐器加载一个名为 libhdhomerun.so(来自 Silicon Dust)的 DVB 共享库。 HDHR 调谐器库已使用 ./configure、...、sudo make install、ldconfig 等进行安装,并且它们都与它们的实用程序一起工作(同时构建)。所以 - 图书馆就在那里,没问题。

库将自己安装到/usr/local/lib 中。它实际上没有像其他共享库那样的符号链接(symbolic link),但它最后也没有任何版本信息。

当我构建代码时(明确包含/usr/local/lib/libhdhomerun.so),ld 阶段失败并显示

"cannot find -lhdhomerun.so"

我已经尝试了包括 (/usr/local/lib/) libhdhomerun.so、hdhomerun.so、libhdhomerun、hdhomerun、创建指向它的符号链接(symbolic link)等的所有组合。没有任何区别。

奇怪的是,我以完全相同的方式包含了 udev、mysql 和 libdvbv5 共享库,而且它们都很好。唯一不会链接的是 hdhomerun。

如果我从命令行“ld -lhdhomerun.so --verbose”运行手动详细链接步骤,它会失败 - 因为它试图找到 libhdhomerun.so.so。

非常感谢收到的任何建议 - 但我确实需要继续使用 code::blocks。

最佳答案

要正确链接库,您需要在您的环境中定义库路径,并使用带有 -l 标志的正确库名称。库路径在 LD_LIBRARY_PATH 环境变量中定义。对于 g++-l 标志,不应提供库扩展 - 正如您已经观察到的那样,因此在您的情况下应该是这样的:

-lhdhomerun

关于c++ - g++ ld 共享库错误代码:: block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39952934/

相关文章:

c++ - 如何在不进行多次传递的情况下找到范围内最小的所有元素(c++)

linux - 为什么这个 GLUT 程序无法编译?我缺少库或 header 吗?

c++ - g++,需要链接器警告/错误以进行多模板特化

c - Linux:如何以编程方式检测进程中的空闲线程?

mysql - 从物理文件恢复 MediaWiki 站点 (MySQL)

android - 使用 Gradle 和 CMake 将静态 ".a"库链接到 Android Studio 项目

c++ - 如何在 Windows、Mac 和 Linux 上检测物理处理器/内核的数量

c++ - OpenCV 中的相机标定和鸟瞰图投影

c++ - 我在这个递归中哪里错了

linux - 如何从 Linux 内核模块的 init_module 代码创 build 备节点?