提问人:Petr Fiedler 提问时间:6/21/2023 更新时间:6/21/2023 访问量:30
G++ 链接器以静默方式忽略库
G++ linker silently ignores a library
问:
我需要将带有库的目标文件链接到可执行文件中,但由于链接器使用了错误的库版本,我不断收到未定义的引用错误。linker 命令非常简单,以下是简化版本:
g++ main.cpp.o -o main -Wl,-rpath,/path-to-dir/lib64:/path-to-dependency/lib: lib64/libWithDependencies.so -Wl,-rpath-link,/path-to-dependency/lib
当我用 运行它时,我看到了搜索库的标准过程,这是一个奇怪的问题。我需要链接.但是,在搜索过程中:-Wl,--verbose
/path-to-dependency/lib/libINeed.so
- 在目录中
-rpath-link
- 在目录中
-rpath
- 在当前工作目录中
- 在
LD_LIBRARY_PATH
- 等。
它在搜索时忽略(不打印任何有关)的内容,而是回退其版本要旧得多。目录路径存在于 和 中。奇怪的是,它会检查目录中所有其他库,甚至使用其中一些库。这让我相信这是文件的问题,但我再次没有收到有关链接器访问它的消息。/path-to-dependency/lib
libINeed.so
/usr/lib64/dependency/lib/libINeed.so
-rpath-link
LD_LIBRARY_PATH
这应该不是版本的问题,因为名称匹配:
readelf -d lib64/libWithDependecies.so | grep libINeed.so
# 0x0000000000000001 (NEEDED) Shared library: [libINeed.so]
readelf -d /path-to-dependency/lib/libINeed.so | grep SONAME
# 0x000000000000000e (SONAME) Library soname: [libINeed.so]
readelf -d /usr/lib64/dependency/libINeed.so | grep SONAME
# 0x000000000000000e (SONAME) Library soname: [libINeed.so.6.24]
更奇怪的是,当我运行时,它会找到正确的路径:ldd
ldd lib64/libWithDependencies.so | grep libINeed.so
# libINeed.so => /path-to-dependency/lib/libINeed.so (0x00007f42b2aa4000)
链接器忽略库而不打印任何关于它的单词的原因可能是什么?
答: 暂无答案
评论