有类似的主题,但我没能在其中找到答案。
我正在使用 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/