我安装了英特尔ComposerXE 2013的试用版(包含ICC 14.0.1编译器)。我的测试程序如下:
#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;
}
我使用intel编译器标志编译代码如下
/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.hpp
和type_traits.hpp
文件
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>
^
现在我使用此编译而没有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
这可以很好地编译ZERO错误
为什么会这样?
我的LD_LIBRARY_PATH
和PATH
变量为空。没有GCC或其路径设置的任何其他编译器。我在编译期间给出了所有路径。
答案 0 :(得分:1)
可能在给定目录中有一些文件与其他文件具有相同的名称,当它为#included时,编译将失败或成功,具体取决于选择这两个相同名称的文件。< / p>
要验证是否是这种情况,请使用选项-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