2014-07-01 2 views
0

ICC 14.0.1 컴파일러가 포함 된 시험판 버전의 Intel ComposerXE 2013을 설치했습니다. 내 테스트 프로그램은 다음입니다 :-I 플래그 (포함 디렉토리)가 컴파일을 중단시키는 이유는 무엇입니까? (인텔 컴파일러 사용)

#include <boost/graph/adjacency_list.hpp> 
#include <iostream> 

typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS> UndirectedGraph; 

int main() { 

    UndirectedGraph G(10); 

return 0; 
} 

내가

In file included from /home/boost_1_55_0/boost/functional/hash/hash.hpp(540), 
       from /home/boost_1_55_0/boost/functional/hash.hpp(6), 
       from /home/boost_1_55_0/boost/unordered/unordered_set.hpp(20), 
       from /home/boost_1_55_0/boost/unordered_set.hpp(16), 
       from /home/boost_1_55_0/boost/graph/adjacency_list.hpp(21), 
       from test.cpp(1): 
/home/boost_1_55_0/boost/functional/hash/extensions.hpp(67): error: "hash_value" is not a function or static data member 
     std::size_t hash_value(std::complex<T> const&); 
       ^

In file included from /home/boost_1_55_0/boost/functional/hash/hash.hpp(540), 
       from /home/boost_1_55_0/boost/functional/hash.hpp(6), 
       from /home/boost_1_55_0/boost/unordered/unordered_set.hpp(20), 
       from /home/boost_1_55_0/boost/unordered_set.hpp(16), 
       from /home/boost_1_55_0/boost/graph/adjacency_list.hpp(21), 
       from test.cpp(1): 
/home/boost_1_55_0/boost/functional/hash/extensions.hpp(121): error: "hash_value" is not a function or static data member 
     std::size_t hash_value(std::complex<T> const& v) 
       ^

In file included from /home/boost_1_55_0/boost/functional/hash/hash.hpp(540), 
       from /home/boost_1_55_0/boost/functional/hash.hpp(6), 
       from /home/boost_1_55_0/boost/unordered/unordered_set.hpp(20), 
       from /home/boost_1_55_0/boost/unordered_set.hpp(16), 
       from /home/boost_1_55_0/boost/graph/adjacency_list.hpp(21), 
       from test.cpp(1): 
/home/boost_1_55_0/boost/functional/hash/extensions.hpp(277): warning #12: parsing restarts here after previous syntax error 
     }; 
    ^

In file included from /home/boost_1_55_0/boost/type_traits.hpp(49), 
       from /home/boost_1_55_0/boost/pending/property.hpp(13), 
       from /home/boost_1_55_0/boost/graph/graph_traits.hpp(27), 
       from /home/boost_1_55_0/boost/graph/adjacency_list.hpp(33), 
       from test.cpp(1): 
/home/boost_1_55_0/boost/type_traits/is_complex.hpp(23): error #303: explicit type is missing ("int" assumed) 
    is_convertible_from_tester(const std::complex<T>&); 
            ^

In file included from /home/boost_1_55_0/boost/type_traits.hpp(49), 
       from /home/boost_1_55_0/boost/pending/property.hpp(13), 
       from /home/boost_1_55_0/boost/graph/graph_traits.hpp(27), 
       from /home/boost_1_55_0/boost/graph/adjacency_list.hpp(33), 
       from test.cpp(1): 
/home/boost_1_55_0/boost/type_traits/is_complex.hpp(23): error: qualified name is not allowed 
    is_convertible_from_tester(const std::complex<T>&); 
            ^

In file included from /home/boost_1_55_0/boost/type_traits.hpp(49), 
       from /home/boost_1_55_0/boost/pending/property.hpp(13), 
       from /home/boost_1_55_0/boost/graph/graph_traits.hpp(27), 
       from /home/boost_1_55_0/boost/graph/adjacency_list.hpp(33), 
       from test.cpp(1): 
/home/boost_1_55_0/boost/type_traits/is_complex.hpp(23): error: expected a ")" 
    is_convertible_from_tester(const std::complex<T>&); 
               ^

In file included from /home/boost_1_55_0/boost/type_traits.hpp(49), 
       from /home/boost_1_55_0/boost/pending/property.hpp(13), 
       from /home/boost_1_55_0/boost/graph/graph_traits.hpp(27), 
       from /home/boost_1_55_0/boost/graph/adjacency_list.hpp(33), 
       from test.cpp(1): 
/home/boost_1_55_0/boost/type_traits/is_complex.hpp(22): warning #488: template parameter "T" is not used in declaring the parameter types of function template "boost::detail::is_convertible_from_tester::is_convertible_from_tester" 
    template <class T> 
        ^

이제

/home/intel/bin/icpc         //binary 
    -L/home/intel/composerxe/lib/intel64    //lib path 
    -I/home/intel/composerxe/include     //include path for ICPC 
    -I/home/boost_1_55_0        //boost path 
    -std=c++11 test.cpp        // c++11 flags 

내가 BOOST HASH.hpptype_traits.hpp 파일을 아래의 오류가 다음과 같이 인텔 컴파일러 플래그를 사용하여 코드를 컴파일 I ICPC INCLUDE PATH없이 이것을 사용하여 컴파일

/home/intel/bin/icpc         //binary 
    -L/home/intel/composerxe/lib/intel64    //lib path 
        //removed the ICPC INCLUDE PATH HERE 
    -I/home/boost_1_55_0        //boost path 
    -std=c++11 test.cpp        // c++11 flags 

그리고이 것은 0으로 오류없이 컴파일됩니다.

왜 이런 일이 발생합니까?

LD_LIBRARY_PATHPATH 변수가 null입니다. 경로가 설정된 GCC 또는 기타 컴파일러가 없습니다. 컴파일하는 동안 모든 경로를 제공하고 있습니다.

+0

당신, 혹시, 아래에 설치 부스트 버전을하지 않음 '/ 홈/인텔/작곡가/포함'? – rodrigo

답변

1

아마도 다른 파일과 이름이 같은 파일이 있고 해당 파일이 #included 인 경우 같은 이름의 두 파일 중 어떤 파일이 선택되었는지에 따라 컴파일이 실패하거나 성공합니다.

이 경우를 확인하려면 두 경우 모두 -H 옵션을 사용하여 컴파일하면 포함 된 모든 파일이 나열되고 출력이 비교됩니다.

이 디렉토리를 제거하지 않고 문제를 해결 명령 줄의 끝으로 이동하려면

/home/intel/bin/icpc         //binary 
    -L/home/intel/composerxe/lib/intel64    //lib path 
    -I/home/boost_1_55_0        //boost path 
    -I/home/intel/composerxe/include     //include path for ICPC 
    -std=c++11 test.cpp        // c++11 flags 
+0

예. -H 옵션이 작동했습니다. 두 곳의 복잡한 파일 인 math.h를 발견했습니다. 내가 포함 경로를 제공하지 않으면 제대로 작동합니다. 경로를 제공하면 오류를 표시하는 다른 파일도 포함됩니다. 인텔 컴파일러 경로 포함은 약간 까다 롭습니다. 포함 경로를 제공 할 필요가 없습니다. 아이디어에 감사드립니다! – Pogo