与gcc和g ++的链接有何不同?

时间:2011-07-18 15:23:59

标签: c++ c gcc linker

gcc和g ++之间的链接过程有什么不同吗?

我有一个很大的C项目,我只是将部分代码切换到C ++。代码尚未使用std C ++库,因此现在不需要-llibstdc++

3 个答案:

答案 0 :(得分:8)

主要区别在于(假设文件被检测为C ++)g ++设置了与C ++标准库链接所需的标志。它还可以设置异常处理。我不会依赖这样的事实,因为你的应用程序不使用标准库,而在编译为C ++时不需要它(例如默认的异常处理程序)。

编辑:正如评论中指出的那样,对于静态对象的任何构造函数(确实有效)以及没有获取虚函数表都会遇到问题(所以如果你使用C ++的那些功能,你仍然需要链接那个图书馆)。

EDIT2:除非您在C项目中使用C99特定代码,否则我实际上只是转而将整个内容编译为C ++,这是迁移过程的第一步。

答案 1 :(得分:0)

gccg++都只是除了调用其他程序之外什么都不做的驱动程序,因此您可以使用-v选项查看它们的具体内容 - 他们用什么args调用了什么其他程序。因此,您可以确切地了解您恰好安装的gcc的特定版本和体系结构与gccg++之间的区别。但是,如果你想要便携性,你就不能依赖它。

根据您的工作,您可能还对-###参数

感兴趣

答案 2 :(得分:-2)

我认为g ++链接器将查找CPP损坏的函数名称,它与C语言不同。我不确定gcc可以应付这个问题。 (前提是您可以明确使用C版本而不是C ++版本。)

编辑:

如果你有

它应该有用
extern "C" {
<declarations of stuff that uses C linkage>
}

在您的代码中,目标文件已使用g++ -c进行编译。但我不会赌这个。