将gcc生成的对象的共享对象库与g ++链接是否有优势?

时间:2012-10-11 20:13:02

标签: gcc g++ shared-libraries

我最近遇到了一个项目,它通过将gcc生成的目标文件(使用CC gnu makefile宏)与g ++链接来创建它的共享对象库。

除了(可能)确保源代码封装在#ifdef __cplusplus / extern "c" { / #endif构造内部以避免名称错位问题之外,还有什么理由为什么这会更好?

1 个答案:

答案 0 :(得分:0)

如果他们只链接g++,那么添加预处理器检查和extern "C"是没用的,只会影响已经完成的链接阶段的预处理和编译。

他们可能想要确保异常可以通过他们的C库传播,但为此,他们只需要链接到libgcc而不是libstdc ++。

也许他们只是希望共享库依赖于libstdc ++,因此该库的用户也将依赖于libstdc ++,并且不必显式链接到它,尽管这可能无法按预期工作。

简而言之,不,如果所有代码都是C代码而不是C ++代码,我想不出任何好的理由。

然而仅因为使用gcc编译某些内容并不意味着它是C代码,您可以使用gcc可执行文件来编译C ++代码,它将调用C ++前端(cc1plus)而不是C前端(cc1)。如果C ++代码使用标准库,则您需要链接-lstdc++ 使用g++链接(自动链接-lstdc++)。所以答案可能就是它是C ++代码,而且他们使用gcc而不是g++编译对象这一事实让你觉得它是C代码。

相关问题