Gcc 可以使用较新的(或两者都使用)libstdc++;在32位Centos 6上?
我们的传统产品在32位Centos 6.6上发布,其中内置了gcc 4.4.7。然而,大型应用程序有时会因glibc崩溃而崩溃。使用GCC4.8重新编译,然后崩溃。然而,使用GCC4.9编译似乎可以解决问题:没有glibc损坏和AddressSanitarizer错误 问题是该应用程序现在需要Gcc 可以使用较新的(或两者都使用)libstdc++;在32位Centos 6上?,gcc,libstdc++,Gcc,Libstdc++,我们的传统产品在32位Centos 6.6上发布,其中内置了gcc 4.4.7。然而,大型应用程序有时会因glibc崩溃而崩溃。使用GCC4.8重新编译,然后崩溃。然而,使用GCC4.9编译似乎可以解决问题:没有glibc损坏和AddressSanitarizer错误 问题是该应用程序现在需要libstdc++.so.6.0.20,并且不再适用于股票Centos 6libstdc++.so.6.0.13(GLIBCXX_blahblah未找到,等等) 那么最好的方法是什么 用新的替换库存/usr
libstdc++.so.6.0.20
,并且不再适用于股票Centos 6libstdc++.so.6.0.13
(GLIBCXX_blahblah
未找到,等等)
那么最好的方法是什么
/usr/lib/libstdc++
libstdc++.so.6.0.20
与我们的应用程序打包(在私有目录中),并修改/etc/ld.so.conf.d
以在系统复制之前加载私有/新库/usr/lib
版本,现有的程序会崩溃吗?我读了很多关于ABI兼容性的文章,但这是一个复杂的主题
感谢您的反馈。您的问题是与其他软件进行轻微的交互 因此,避免替换库的库存版本。 此外,还可能使用/etc/ld.so.conf与其他软件进行交互 因此,避免与其他软件交互的最佳方法是:
- 将您的libstdc++6.0.20静态链接到您的旧版产品或应用程序(您需要源代码,或者至少需要独立的对象文件,因此可能不可能)李>
- 或者将libstdc++.so.6.0.20安装在特定目录中,如/usr/local/my-own version for my-app/lib,而不是使用ld.so.conf发布此目录,请使用:
- 一个LD_LIBRARY_PATHenv var设置为/usr/local/my-own version for my-app/lib:$LD_LIBRARY_PATH,在启动应用程序之前:
- 或者将LD_PRELOADenv变量设置为:LD_PRELOAD=/usr/local/my-own version for my-app/lib/libstdc++.so.6.0.20,然后再启动应用程序
- 或者将libstdc++.so.6.0.20安装在特定目录中,如/usr/local/my-own version for my-app/lib,而不是使用ld.so.conf发布此目录,请使用:
% export LD_LIBRARY_PATH=/usr/local/my-own-version-for-my-app/lib:$LD_LIBRARY_PATH
% ./launch_my_app
或:
很好的建议。谢谢
% export LD_PRELOAD=/usr/local/my-own-version-for-my-app/lib/libstdc++.so.6.0.20
% ./launch_my_app