我正在为一个跨越几个不同组织的项目开发redhat 5.2。每个组织都提供使用各种版本的g ++编译的库。目前,这些版本包括4.1.1,4.1.2和4.3.1。我试图使用4.1.2将所有库链接到一个可执行文件。如果有的话,我可以期待这样做的问题是什么?顺便说一下,有没有办法告诉每个编译器版本构建到哪个ABI?
答案 0 :(得分:6)
此ABI政策文件详细说明了不同ABI版本之间的兼容性。
据此,libstdc++.so
库应该是兼容的,上次gcc打破二进制兼容性的时间是3.4。你应该没事。
答案 1 :(得分:5)
GCC(GNU编译器集合)定义了版本号和兼容性。
4.1.1和4.1.2之间的G ++库应该兼容;与最新的链接。
4.1.x和4.2.x之间的G ++库不兼容;你需要重新编译一些东西。
3.x.y和4.p.q之间的G ++库不兼容;你需要重新编译一些东西。
在您的方案中,使用4.3.1构建的代码与其他代码不兼容。
您必须重建当前使用4.3.x编译的代码,因此它使用4.1.x,或者您需要重新编译当前使用4.1.x编译的代码,因此它使用4.3.x而不是。
答案 2 :(得分:1)
可能更容易静态链接可执行文件...制作一个大二进制文件,但在所有平台上运行。
答案 3 :(得分:0)
连接不同版本的g ++构建的库应该没有问题,除非它们已经在g ++网站上列出。重要的是,这些库建立在同一平台上,在你的情况下是redhat 5.2。为linux / redhat之外的平台(比如solaris)构建的库不会与你的exe链接。
答案 4 :(得分:0)