【发布时间】:2016-05-03 11:24:52
【问题描述】:
我正在尝试使用一个名为 libai_driver_rhf.so 的库,我使用 local-build 库 编译该库以在服务器上使用它,而无需安装所需的依赖项。但是当我运行命令ldd libai_driver_rhf.so | grep "not found" 时,我得到了这个:
./libai_driver_rhf.so: /lib64/libc.so.6: version `GLIBC_2.18' not found (required by /home/k.masson/Documents/nuke/nuke_plugin_test/src/dependencies/lib64/libstdc++.so.6)
我之前有更多未发现的错误,但我通过为我的计算机下载正确的库并将它们放入依赖项文件夹来修复它们。在此之前,我还遇到了另一个更高的 GLIBC not found 错误,我通过下载并将libstdc++.so.6 放入dependencies/lib64 来修复。
我也使用本地编译器,gcc 4.9.3 和 4.8.5 安装在我的机器上。
我不知道这是否与错误有关,但这里是在我的本地库和我的机器库上执行字符串时 grep "GLIBC" 的结果。
对于dependencies/lib/libc.so.6:
[k.masson@hauser24 src]$ strings dependencies/lib/libc.so.6 | grep GLIBC
GLIBC_2.0
GLIBC_2.1
GLIBC_2.1.1
GLIBC_2.1.2
GLIBC_2.1.3
GLIBC_2.2
GLIBC_2.2.1
GLIBC_2.2.2
GLIBC_2.2.3
GLIBC_2.2.4
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_2.15
GLIBC_2.16
GLIBC_2.17
GLIBC_2.18
GLIBC_2.22
GLIBC_PRIVATE
__sys_nerr_GLIBC_2_4
__sys_nerr_GLIBC_2_3
__sys_nerr_GLIBC_2_1
__sys_nerr_GLIBC_2_0
__sys_errlist_GLIBC_2_4
__sys_errlist_GLIBC_2_1
__sys_errlist_GLIBC_2_3
__sys_errlist_GLIBC_2_0
___sys_nerr_GLIBC_2_3
___sys_nerr_GLIBC_2_4
___sys_nerr_GLIBC_2_0
___sys_nerr_GLIBC_2_1
.................................... much more
对于dependencies/lib64/libstdc++.so.6:
[k.masson@hauser24 src]$ strings dependencies/lib64/libstdc++.so.6 | grep GLIBC
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBC_2.3
GLIBC_2.2.5
GLIBC_2.14
GLIBC_2.4
GLIBC_2.18
GLIBC_2.17
GLIBC_2.3.2
GLIBCXX_DEBUG_MESSAGE_LENGTH
对于/usr/lib/libstdc++.so.6:
[k.masson@hauser24 src]$ strings /usr/lib/libstdc++.so.6 | grep GLIBC
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBC_2.3
GLIBC_2.0
GLIBC_2.4
GLIBC_2.1
GLIBC_2.1.3
GLIBC_2.3.2
GLIBC_2.2
GLIBCXX_DEBUG_MESSAGE_LENGTH
我的LD_LIBRARY_PATH 看起来像这样:
[k.masson@hauser24 src]$ echo $LD_LIBRARY_PATH
/home/k.masson/gcc-4.9.3/lib:/home/k.masson/Documents/nuke/nuke_plugin_test/src/dependencies/lib64:/home/k.masson/Documents/nuke/nuke_plugin_test/src/dependencies/lib:/home/k.masson/Documents/nuke/nuke_plugin_test/src/dependencies/lib:
如我所见,我不知道是否真的如此,GLIBC_2.18 不在 /usr/lib/libstdc++.so.6 中,确实如此这意味着 ldd 将 stdc 带入 /usr/lib ?如果是这种情况,我该如何更改?或者事实并非如此,我错了?这不足为奇,因为我不了解这些链接器问题。
【问题讨论】:
标签: c++ linux gcc dynamic-linking