2014-07-09 2 views
3

이전 버전의 인텔 컴파일러 (11) 및 gcc (4.3)가있는 클러스터에서 작업하고 있습니다.인텔 컴파일러로 컴파일 코드에서 /usr/include/c++/4.3/을 제외하려면

인텔 합성기 xe (14.0 컴파일러 포함)의 최신 평가판을 설치했습니다. gcc 4.9도 설치했습니다. 새로운 gcc 컴파일러와 인텔 컴파일러가 모두 내 홈 디렉토리에 있습니다. (루트가 아님)

코드에 C++ 11을 사용하므로 분명히 컴파일을 위해 -std=c++11 플래그를 사용합니다. 내가 icpc 내 코드를 컴파일 할 때 내 메이크

에 인텔의 포함 및 라이브러리를 포함 -L-I 플래그를 제공, 컴파일러는 /user/include/c++/4.3/ .... 경로를 찾습니다.

나는 /home/peter/intel/composerxe/includeC_INCLUDE_PATHCPLUS_INCLUDE_PATH를 설정하여 경로를 제거하려고 노력했다. 그러나 여전히 경로는 /usr/include/c++입니다. 이 때문에/ user/include/c++/4.3/tr1_impl/ ...의 이전 파일은 최신 파일이 아닌 포함되어 있습니다.

어떻게하면이 경로를보고 새 경로를 볼 수 있습니까? 이제 intel 컴파일러 대신 gcc4.9를 사용하여 어떤 변경 작업을해야합니까?

나는 컴파일을 위해 -nostdinc 플래그를 추가하려했지만 행운을 보지 못했습니다. 이 같은 오류를 제공합니다 : 1 헤더가 iostream입니다 포함되어 있으므로

catastrophic error cannot open source file "iostream" 

나는 인텔은 시스템에 이미 설치된 GCC로부터 헤더를 공유하고이 /가 포함 USR/걸리거나 USR은 로컬 /이 /가 포함 있다고 생각
+0

gcc의 경우, '-nostdinc' 스위치는 무엇이 될 수 있습니다. 당신은 –

+0

내가 그것을 시도합니다.home/peter/intel/bin/icpc -o test -H -nostdinc -I/home/peter/intel/composerxe/include -L/home/peter/intel/composerxe/lib/intel64 다음은 make 파일의 내용입니다. -I/home/peter/boost_1_55_0 -std = C++ 11 test.cpp ... "iostream"소스 파일을 열 수없는 치명적인 오류가 발생합니다 – pugs

+1

@pugs 질문에 해당 정보를 편집해야합니다. – JBentley

답변

2

경로.

필자의 경우 클러스터의 운영 체제는 gcc4.3을 기본 GNU 컴파일러로 사용하는 수세 리눅스입니다. 나는 gcc --print-search-dirs했다

이제, 클러스터 관리 소프트웨어가 두 개의 컴파일러 (인텔 및 GCC)가 동시에로드 할 수 있도록 설정 (모듈 인텔 버전 11 및 모듈 GCC 버전 4.5)

후 나는 밖으로 발견 된 그 intel 컴파일러는 기존 gcc 컴파일러 (이 경우 4.3)에서 일반적인 헤더 (iostream 등)를 상속하므로 이전 tr1_imple 파일과 헤더가 포함되므로 C++ 11 코드를 컴파일 할 때 오류가 발생합니다.

gcc 4.9를 내 홈 디렉토리에 설치했지만 int 14는 gcc 4.9의 헤더와 이번에는 이상한 컴파일러 오류를 포함하여 호환성 문제가 있습니다.

gcc 4.5 (using module load gcc-4.5) atleast를 사용하여 코드를 컴파일하는 동안이 문제에 대한 유일한 해결책은 gcc 4.7.2를 사용하고 C++ 11의 첫 번째 릴리스 이후에 포함 경로를 제공하는 것입니다. 동시성을 제외하고 많은 C++ 11 기능을 구현하는 지원 (C++ 0x 작업 초안이 아님)

인텔 컴파일러는 OS에서 제공하거나 사용자/루트가 설치 한 기존 gcc 컴파일러에 의존한다는 것을 알아야합니다. 그것 없이는 거의 사용하지 않습니다.

환호성!