0

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

除了(可能)确保源代码被封装在#ifdef __cplusplus / extern "c" { / #endif结构中以避免名称修改问题之外,还有什么理由会......更好吗?

4

1 回答 1

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 代码。

于 2012-10-12T11:52:02.777 回答