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

问题描述 投票:0回答:5

我正在开发 redhat 5.2 的一个项目,该项目跨越多个不同的组织。 每个组织都提供使用不同版本的 g++ 编译的库。 目前,这些版本包括4.1.1、4.1.2和4.3.1。 我正在尝试使用 4.1.2 将所有库链接到一个可执行文件中。 这样做可能会出现什么问题(如果有的话)? 顺便说一句,有没有办法知道每个编译器版本构建到哪个 ABI?

c++ linux compatibility
5个回答
6
投票

ABI政策文档详细介绍了不同ABI版本之间的兼容性。 据此,

libstdc++.so
库应该是兼容的,而上次gcc打破二进制兼容性是在3.4。你应该没事的。


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。


1
投票

也许静态链接可执行文件更容易......生成一个大的二进制文件,但可以在所有平台上运行。


0
投票

链接从不同版本的 g++ 构建的库应该没有问题,除非它们已在 g++ 网站上列出。但重要的是这些库构建在同一平台上,在您的例子中是 redhat 5.2。为 linux/redhat(例如,solaris)以外的平台构建的库不会与您的 exe 链接。


0
投票

IIRC,有一个 C++ 兼容性库就是用来做到这一点的。 我认为它叫做 libstdc++-compat

© www.soinside.com 2019 - 2024. All rights reserved.