Linux C程序使用针对libgcc_s.so.1和libstdc .so.6库的GCC链接构建,每个库包含多个ABI:较新版本包含先前版本的ABI和新版本的ABI. GCC ABI policy document表示针对旧运行时构建的程序应该能够与新运行时一起运行.因此,从理论上讲,较旧的二进制文件应该可以在新系统上运行.
如果我的系统具有较旧的运行时并且不想在此系统上遇到升级GCC的麻烦,我可以手动用新的库替换上面提到的库吗?从理论上讲,与之相关的所有旧的可执行文件都应该可以工作(包括GCC本身),但它感觉就像一个kludge.
这样做是否安全?
解决方法:
也许,但我不推荐它,至少没有经过大量测试几乎肯定会吃掉任何收益.原因如下:
>“ABI兼容”不一定是“bug兼容”.即使保持了ABI兼容性,如果他们以某种方式依赖于以前版本的库中不正确的行为,您的应用程序仍可能以惊人的方式中断.
>可能会有新的错误最终破坏您的应用程序,再次没有ABI不兼容.
>如果您没有完全正确地编译新库,它们可能不兼容ABI.
>您确定原始库是从原始GNU源编译的吗?也许有一些你不知道的补丁.如果您无法确定,则无法确定现有系统/应用程序的兼容性.
你的目标是什么?如果您只是希望能够编译使用更新功能的C应用程序,您可以在原始版本的同时安装新版本的GCC,您只需要确保您可能使用的所有库都使用新版本构建.
标签:c-2,linux,gcc
来源: https://codeday.me/bug/20190626/1299280.html