我正在使用旧版本的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_PATH
和CPLUS_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
答案 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编译器。没有它,它们几乎没用。
干杯!