使用与使用不同 gcc 版本编译的库不同的 gcc 编译应用程序

Posted

技术标签:

【中文标题】使用与使用不同 gcc 版本编译的库不同的 gcc 编译应用程序【英文标题】:compile application with gcc that is different from library compiled with different gcc version 【发布时间】:2015-04-15 06:28:01 【问题描述】:

我想用 gcc 4.7 编译一个 c++ 应用程序,这个应用程序与一个用 gcc 4.4 编译的库链接。我只想知道有没有问题?

【问题讨论】:

自己试试看吧。 【参考方案1】:

答案是:视情况而定。这并不是真正的编译器或系统特定的。例如,它也适用于 Visual Studio。

基本上,这样做应该没有任何问题(这是一个相当典型的场景)。

但是,重要的问题是,两个二进制文件之间传递了什么样的数据。

例如,如果所有字符串都作为char * 传递,那么一切都很好。一旦你在某个地方传递了一个std::string(或只是一个指针或对一个的引用),那么如果两个文件之间的实现发生变化(例如不同的 STL 实现或只是改变了对齐方式),事情就会中断。

对于其他事物也是如此,甚至是您自己的自定义结构和类。如果界面经过精心设计,应该没有任何问题。如果界面没有考虑到这种情况,那么您可能会遇到非常难以调试或几乎不可能调试的问题(随机崩溃、堆栈对齐问题等)。

【讨论】:

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

GCC/MingW 在不同版本上编译

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

gcc的替换,很有用

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

Ubuntu下两个gcc版本切换

gcc的使用简介与命令行参数说明