在使用intel编译器编译代码时排除/usr/include/c++/4.3/

时间:2014-07-09 00:10:45

标签: c++ linux gcc c++11 icc

我正在使用旧版本的intel编译器(11)和gcc(4.3)的集群。

我安装了较新的intel composer xe试用版(带14.0编译器)。我也安装了gcc 4.9。新的gcc和intel编译器都在我的主目录(非root)中

我在代码中使用C ++ 11,所以显然我使用-std=c++11标志进行编译。我提供-L-I标记,以在我的makefile中包含intel的包含和库

当我尝试使用icpc编译我的代码时,编译器会查找/user/include/c++/4.3/ .... path。

我尝试通过将C_INCLUDE_PATHCPLUS_INCLUDE_PATH设置为删除路径 /home/peter/intel/composerxe/include。 但它仍然在/usr/include/c++路径中查看。因此,包含/ user/include/c++/4.3/tr1_impl/ ...中的旧文件,而不是最新文件。

如何阻止intel编译器查看这些路径并查看新路径。现在我使用gcc4.9而不是intel编译器,我需要进行哪些更改?

我尝试添加-nostdinc标志进行编译,但没有运气。它给出了错误:

catastrophic error cannot open source file "iostream"

因为第一个包含标题是iostream

1 个答案:

答案 0 :(得分:2)

我发现intel与系统中已安装的gcc共享其标头,并采用/ usr / include或usr / local / include路径。

在我的例子中,我们集群上的操作系统是SUSE linux,gcc4.3是默认的GNU编译器。

现在,集群管理软件设置为无法同时加载两个编译器(intel和gcc)(模块intel版本11和模块gcc版本4.5)

在我做了gcc --print-search-dirs后,我发现intel编译器从现有的gcc编译器(在本例中为4.3)继承了一些公共头文件(iostream等),因此包含旧的tr1_imple文件和头文件,因为其中我在编译c ++ 11代码时遇到错误。

我确实在我的主目录中安装了gcc 4.9,但是intel 14在包含来自gcc 4.9的标头时存在兼容性问题,而这次又是奇怪的编译器错误。

虽然使用gcc 4.5(using module load gcc-4.5)至少让我编译代码,但我认为解决这个问题的唯一方法是使用gcc 4.7.2并提供其包含路径,因为这是第一个用c发布的++ 11支持(不是c ++ 0x工作草案)实现了除并发之外的许多c ++ 11特性。

需要知道,英特尔编译器确实依赖于操作系统提供的或用户/ root安装的现有gcc编译器。没有它,它们几乎没用。

干杯!