我最近遇到了一个项目,它通过将gcc生成的目标文件(使用CC
gnu makefile宏)与g ++链接来创建它的共享对象库。
除了(可能)确保源代码封装在#ifdef __cplusplus / extern "c" { / #endif
构造内部以避免名称错位问题之外,还有什么理由为什么这会更好?
答案 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代码。