【发布时间】: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