c++ - 为什么额外的 -I 标志(包含目录)会中断编译? (使用英特尔编译器)

标签 c++ boost icc

我安装了英特尔 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;  
}

我使用英特尔编译器标志编译代码如下

/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 文件出现以下错误

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 

这编译得很好,零错误

为什么会这样?

我的 LD_LIBRARY_PATHPATH 变量为空。没有设置路径的 GCC 或任何其他编译器。我在编译过程中给出了所有路径。

最佳答案

可能在给定目录中有一些文件与其他文件同名,当它被#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 

关于c++ - 为什么额外的 -I 标志(包含目录)会中断编译? (使用英特尔编译器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24505430/

相关文章:

android - 尝试在 Cocos2d-X C++ 中设置一个带有整数的 CCLabelTTF 作为其字符串的一部分

c++ - 使用模板和 boost 功能

c++ - 使用boost factory按需生产产品C++

c++ - using 声明是否应该隐藏继承的虚函数?

c++ - 类声明或定义中的静态变量?

c++ - C++ 和 DirectX 文件中的链接错误包括问题

linux - 如何从 elf 文件格式创建可执行十六进制

c++ - 我可以使用 ICC 为多种 CPU 架构进行编译吗?

c++ - win32程序如何使用自己的ico文件

c++ - 使用 Iterator 解析 Boost::Spirit Grammars