根据 GCC ABI Policy and Guidelines 页面,我了解到他们试图保持前向兼容性,但我想知道这在多大程度上是正确的,或者我是否遗漏了一些东西。
我目前正在尝试在带有 libstdc++ 6.0.19 的 CentOS 7 上使用 gcc 4.1.2 / libstdc++ 6.0.8 运行基于 red hat 5 构建的 C++ 软件。
我遇到了奇怪的行为,例如随机崩溃(可能会工作一段时间,然后系统崩溃 30 分钟,然后再次工作......)或内存猛增以使用所有 64GB 服务器(以前从未见过这个问题)。
我似乎通过静态链接 libgcc 和 libstdc++ 解决了其中一个行为不端程序的问题。几个小时过去了,没有崩溃。我正在考虑使用 LD_LIBRARY_PATH 并将库与可执行文件一起发送。
但是将相同类型的解决方案应用于整个系统将非常耗时,所以如果有人能告诉我我是否走在正确的轨道上,我将不胜感激。
- 编辑 -
我忘了提,有些库是静态链接到 libstdc++ 的,有些是动态链接的,所以我有以下情况:
program_a -(dyn link)-> libstdc++
|-(dyn link)-> lib_b -(static link)-> libstdc++
|-(dyn link)----> lib_c -(dyn link)-> libstdc++
所以这里我有一个 libstdc++ 是系统的,另一个是编译器的。