【问题标题】:g++ ld shared library error with code::blocksg++ ld 共享库错误与代码::blocks
【发布时间】:2016-10-10 07:11:14
【问题描述】:

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

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

库将自身安装到 /usr/local/lib 中。它实际上没有符号链接,就像其他共享库一样,但它最后也没有任何版本信息。

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

"cannot find -lhdhomerun.so"

我尝试了所有组合,包括 (/usr/local/lib/) libhdhomerun.so、hdhomerun.so、libhdhomerun、hdhomerun、创建符号链接等。没有任何区别。

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

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

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

【问题讨论】:

  • 正如您已经发现的那样,-l 指令采用不带 lib 且不带扩展名的库名称,例如-lhdhomerun。奇怪的是它没有so-version,它通常表示一个插件而不是一个“普通”库,而是在一个“普通”库位置。

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


【解决方案1】:

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

-lhdhomerun

【讨论】:

  • 谢谢。在对上述内容进行了大量实验之后,它才刚刚开始工作 - 使用原始设置。困惑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-29
  • 1970-01-01
  • 1970-01-01
  • 2011-04-02
  • 2017-07-11
  • 2015-10-04
  • 1970-01-01
相关资源
最近更新 更多