[英]Mixing libraries from different C++ compilers
我正在研究一个跨越几个不同组织的项目的redhat 5.2。 每个组织都提供使用各种版本的g ++编译的库。 目前,这些版本包括4.1.1,4.1.2和4.3.1。 我试图使用4.1.2将所有库链接到一个可执行文件。 如果有的话,我可以期待这样做的问题是什么? 顺便说一下,有没有办法告诉每个编译器版本构建到哪个ABI?
此ABI策略文档详细说明了不同ABI版本之间的兼容性。 根据它, libstdc++.so
库应该是兼容的,并且gcc最后一次打破二进制兼容性是在3.4。 你应该没事。
GCC(GNU编译器集合)定义版本号和兼容性。
4.1.1和4.1.2之间的G ++库应该是兼容的; 与最新的链接。
4.1.x和4.2.x之间的G ++库不兼容; 你需要重新编译一些东西。
3.xy和4.pq之间的G ++库不兼容; 你需要重新编译一些东西。
在您的方案中,使用4.3.1构建的代码与其余代码不兼容。
您必须重建当前使用4.3.x编译的代码,因此它使用4.1.x,或者您需要重新编译当前使用4.1.x编译的代码,因此它使用4.3.x代替。
也许更容易静态链接可执行文件...制作一个大二进制文件,但在所有平台上运行。
除非已经在g ++网站上列出,否则链接从不同版本的g ++构建的库应该没有问题。 重要的是,这些库建立在同一平台上,在你的情况下是redhat 5.2。 为linux / redhat之外的平台(例如solaris)构建的库不会与您的exe链接。
IIRC,有一个C ++兼容库,用于实现这一目标。 我认为它叫做libstdc ++ - compat 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.