C++ 混合来自不同C+的库+;编译程序

C++ 混合来自不同C+的库+;编译程序,c++,linux,compiler-construction,compatibility,C++,Linux,Compiler Construction,Compatibility,我正在一个跨多个不同组织的项目上开发Redhat5.2。每个组织都提供使用不同版本的g++编译的库。目前,这些版本包括4.1.1、4.1.2和4.3.1。我正在尝试使用4.1.2将所有库链接到一个可执行文件中。如果这样做会有什么问题?顺便问一下,有没有办法知道每个编译器版本构建到哪个ABI?也许静态链接可执行文件更容易。。。生成大型二进制文件,但在所有平台上运行。此策略文档详细说明了不同ABI版本之间的兼容性。 根据这一点,libstdc++。因此库应该是兼容的,上次gcc打破二进制兼容性是在3

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

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

此策略文档详细说明了不同ABI版本之间的兼容性。
根据这一点,
libstdc++。因此
库应该是兼容的,上次gcc打破二进制兼容性是在3.4。您应该很好。

链接从不同版本的g++构建的库应该不会有问题,除非它们已在g++网站上列出。但重要的是,这些库构建在相同的平台上,在您的例子中,该平台是redhat 5.2。一个为Linux和ReHAT(除了Solaris)而构建的库将不会链接到exe。< /p> irc,有一个C++兼容库,用于这样做。我认为它叫做libstdc++-compat

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。

你不能将依赖于不同版本的stdlibc++的对象链接在一起。起初我以为你指的是红帽5.2(Apollo),它已经有十多年历史了。:)这是理论,但在实践中,最后一次ABI变化是3。4@Edu当前位置但在未来的任何时候,都可能会有一个调用该规则的变化,那些对事情马虎的人可能会感到意外(不得不重新编译)。