链接使用不同版本的 gcc 编译的库

Posted

技术标签:

【中文标题】链接使用不同版本的 gcc 编译的库【英文标题】:Linking libraries compiled with different version of gcc 【发布时间】:2013-01-29 16:06:36 【问题描述】:

我有一个 C++ 软件(Borealis 流引擎),该软件已编译并与 GCC 3.3.6 一起使用(我无法使其与较新版本的 GCC 一起使用,并且不再支持该软件) .

我喜欢扩展它来调用一些复杂的加密库(基于配对的库),这些库肯定是用最新版本的 GCC 编译的。

我的问题是是否有可能做到这一点,即从使用旧版本 GCC 编译的代码中调用使用新版本 GCC 编译的库?技术上可行吗?潜在的问题是什么?

我希望有人能帮助阐明这些问题,这样我就可以避免花费数天(甚至数周)编译和学习如何使用这些软件,最终发现它们不能一起工作。

【问题讨论】:

【参考方案1】:

是的。如果不是这样,我们就会遇到严重的问题。编译器的版本与平台的ABI无关。

(在 C++ 编译器的情况下,实际上可能会破坏的一件事是名称修改约定的更改,但是,例如,对于 C,即使这种风险也不存在。)

【讨论】:

The C++ interface has evolved throughout the history of the GNU C++ toolchain. With each release, various details have been changed so as to give distinct versions to the C++ interface. 您会注意到 libgcc.so 的版本在 GCC 版本之间会发生变化,以便识别 ABI 何时不兼容,这是 3.x 和 4.x 之间的情况, 在某些平台上. @Non-StopTimeTravel 是的。请参阅答案的括号部分。 是的,我阅读了您的回答。现在阅读我的评论,以及我链接到的网站。

以上是关于链接使用不同版本的 gcc 编译的库的主要内容,如果未能解决你的问题,请参考以下文章

GCC/MingW 在不同版本上编译

C++ 两个库依赖于相同的库但不同的版本?

由于C++类库版本不同导致的OpenCV编译链接错误

请教arm-linux-gcc 版本与QT版本和linux内核的关系!

gcc的替换,很有用

Ubuntu下gcc多版本共存和版本切换