繁体   English   中英

混合来自不同C ++编译器的库

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM