我的应用程序链接到构建在RHEL 6上的库。当我在RHEL 7上编译这个应用程序时,链接器会为glibc版本抛出错误。以下是错误之一:
对符号'__tls_get_addr@@GLIBC_2.12‘/ ld 64/ld-linux-x86-64.so.2的未定义引用:错误添加符号: collect2: collect2:ld返回1退出状态
为了修复,我将libc和libm从RHEL 6复制到RHEL 7,并将它们与libc和libm从RHEL 7链接到一起。如果我将libc和libm从RHEL 6复制到RHEL 7,会在运行时引起问题吗?还有其他方法可以解决这些问题吗?
谢谢你,曼戈什·萨温特。
发布于 2020-07-11 14:24:19
如果我将libc和libm从
6复制到RHEL 7,它会在运行时引起问题吗?
将libc.so.6和libm.so.6从RHEL6复制到例如~/rhel6/libs或/tmp不会引起任何问题(您已经做过了)。
但是用RHEL6 6的副本覆盖RHEL6 7的/lib64/libc.so.6可能会使RHEL7系统上的每一个程序崩溃,并使该系统无法启动。确保您有备份和救援磁盘,并知道如何使用它,如果您决定尝试这一点。
还有其他方法来解决这些问题吗?
正确的处理方法是构建一个工具链,该工具链以期望的GLIBC为目标。更多信息,here。
发布于 2020-07-14 07:42:59
虽然RedHatEnterpriseLinux6附带了glibc2.12,但它没有__tls_get_addr@GLIBC_2.12版本化的符号,只有__tls_get_addr@GLIBC_2.3。这个符号也出现在以后的glibc版本中。
我不认为你所面临的问题可以通过降级来解决。正如Employed Russian所说,覆盖系统glibc无论如何都会使系统无法启动。
https://stackoverflow.com/questions/62833802
复制相似问题