/ usr / include文件(例如string.h)如何与gcc版本相关?

时间:2011-11-11 20:36:23

标签: gcc include multiple-versions

我有一个带有Eclipse-CDT Indigo的Kubuntu 11.10系统。 gcc-4.6与Eclipse一起安装。我已经通过Ubuntu软件包安装了gcc-4.4和gcc-4.2。

我可以将/ usr / bin / gcc符号链接切换到4.4或4.6,Eclipse会以任何方式构建我的代码。但是,当我将符号链接设置为使用gcc-4.2时,我收到以下错误(还有更多):

In file included from /usr/include/c++/4.2/cstring:52,
             from /usr/include/c++/4.2/i486-linux-gnu/bits/c++locale.h:47,
             from /usr/include/c++/4.2/iosfwd:45,
             from /usr/include/c++/4.2/ios:43,
             from /usr/include/c++/4.2/ostream:45,
             from /usr/include/c++/4.2/iostream:45,
             from ../ProjStructure.h:4,
             from ../Scanner.h:3,
             from ../Scanner.cpp:1:
/usr/include/string.h:29: error: ‘__BEGIN_DECLS’ does not name a type

所以看来我在/ usr / include中的string.h期望__BEGIN_DECLS由一个特定于编译器的包含定义。

/usr/include/string.h来自libc6-dev软件包,它似乎没有特定于编译器的版本。我希望包系统能够处理这个并安装所有正确版本的东西。

我已经阅读了多个GCC版本的GNU文档,但他们没有提及包含文件/目录的任何内容。

我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

Ubuntu是你的gcc-4.2包吗?

可能来自较旧的Ubuntu版本。新的Ubuntu版本改变了一些标题和库目录,这打破了旧的编译器。