在 Linux 服务器上编译 C++ 程序时 Intel 编译器的语法

Posted

技术标签:

【中文标题】在 Linux 服务器上编译 C++ 程序时 Intel 编译器的语法【英文标题】:Syntax of Intel compiler while compiling C++ program on Linux server 【发布时间】:2014-08-06 14:16:02 【问题描述】:

我是 Linux 上 shell 和编译 C++ 程序的新手。

我有一个 C++ 程序,我习惯用 G++ 编译它,使用以下命令:

g++ lapack.cpp generators.cpp SimpleRNG.cpp testabc.cpp -O3 -o examplexi.o;​

该命令工作正常,testabc.cpp 需要从 Eigen 库调用函数,但是,当我尝试将以下命令与 intel 编译器一起使用时:

icpc lapack.cpp generators.cpp SimpleRNG.cpp testabc.cpp -O3 -o examplexi.o;​

有很多错误,这里我只挑了一个放在下面:

  Eigen::Matrix<double, -1, -1, 0, -1, -1>>, const Eigen::GeneralProduct<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, 5>>>>]" at line 274 of "testabc.cpp"

我没有找到有关英特尔编译器特殊语法的任何信息,有人可以在这里帮助我吗?

非常感谢!

附:

其实我发现所有的错误信息都是警告,程序终于可以编译了。但是所有这些警告信息仍然很烦人,所以我在这里发布前几行,希望你能帮助我!

eigen/Eigen/src/Core/Product.h(453): warning #2196: routine is both "inline" and "noinline"
  general_matrix_vector_product
  ^
      detected during:
        instantiation of "void Eigen::internal::gemv_selector<2, 0, true>::run(const ProductType &, Dest &, ProductType::Scalar) [with ProductType=Eigen::GeneralProduct<Eigen::Block<Eigen::Matrix<double, -1, -1, 0, -1, -1>, -1, -1, false, true>, Eigen::Transpose<const Eigen::Block<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 1, -1, false, true>>, 4>, Dest=Eigen::Block<Eigen::Matrix<double, -1, -1, 0, -1, -1>, -1, 1, false, true>]" at line 340
        instantiation of "void Eigen::GeneralProduct<Lhs, Rhs, 4>::scaleAndAddTo(Dest &, Eigen::GeneralProduct<Lhs, Rhs, 4>::Scalar) const [with Lhs=Eigen::Block<Eigen::Matrix<double, -1, -1, 0, -1, -1>, -1, -1, false, true>, Rhs=Eigen::Transpose<const Eigen::Block<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 1, -1, false, true>>, Dest=Eigen::Block<Eigen::Matrix<double, -1, -1, 0, -1, -1>, -1, 1, false, true>]" at line 124 of "eigen/Eigen/src/Core/ProductBase.h"
        instantiation of "void Eigen::ProductBase<Derived, Lhs, Rhs>::scaleAndAddTo(Dest &, Eigen::ProductBase<Derived, Lhs, Rhs>::Scalar) const [with Derived=Eigen::GeneralProduct<Eigen::Block<Eigen::Matrix<double, -1, -1, 0, -1, -1>, -1, -1, false, true>, Eigen::Transpose<const Eigen::Block<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 1, -1, false, true>>, 4>, Lhs=Eigen::Block<Eigen::Matrix<double, -1, -1, 0, -1, -1>, -1, -1, false, true>, Rhs=Eigen::Transpose<const
                  Eigen::Block<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 1, -1, false, true>>, Dest=Eigen::Block<Eigen::Matrix<double, -1, -1, 0, -1, -1>, -1, 1, false, true>]" at line 121 of "eigen/Eigen/src/Core/ProductBase.h"
        instantiation of "void Eigen::ProductBase<Derived, Lhs, Rhs>::subTo(Dest &) const [with Derived=Eigen::GeneralProduct<Eigen::Block<Eigen::Matrix<double, -1, -1, 0, -1, -1>, -1, -1, false, true>, Eigen::Transpose<const Eigen::Block<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 1, -1, false, true>>, 4>, Lhs=Eigen::Block<Eigen::Matrix<double, -1, -1, 0, -1, -1>, -1, -1, false, true>, Rhs=Eigen::Transpose<const Eigen::Block<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 1, -1, false, true>>,
                  Dest=Eigen::Block<Eigen::Matrix<double, -1, -1, 0, -1, -1>, -1, 1, false, true>]" at line 87 of "eigen/Eigen/src/Core/NoAlias.h"
        instantiation of "ExpressionType &Eigen::NoAlias<ExpressionType, StorageBase>::operator-=(const Eigen::ProductBase<ProductDerived, Lhs, Rhs> &) [with ExpressionType=Eigen::Block<Eigen::Matrix<double, -1, -1, 0, -1, -1>, -1, 1, false, true>, StorageBase=Eigen::MatrixBase, ProductDerived=Eigen::GeneralProduct<Eigen::Block<Eigen::Matrix<double, -1, -1, 0, -1, -1>, -1, -1, false, true>, Eigen::Transpose<const Eigen::Block<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 1, -1, false, true>>,
                  4>, Lhs=Eigen::Block<Eigen::Matrix<double, -1, -1, 0, -1, -1>, -1, -1, false, true>, Rhs=Eigen::Transpose<const Eigen::Block<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 1, -1, false, true>>]" at line 219 of "eigen/Eigen/src/Cholesky/LLT.h"
        instantiation of "MatrixType::Index Eigen::internal::llt_inplace<1>::unblocked(MatrixType &) [with MatrixType=Eigen::Matrix<double, -1, -1, 0, -1, -1>]" at line 232 of "eigen/Eigen/src/Cholesky/LLT.h"
        instantiation of "MatrixType::Index Eigen::internal::llt_inplace<1>::blocked(MatrixType &) [with MatrixType=Eigen::Matrix<double, -1, -1, 0, -1, -1>]" at line 282 of "eigen/Eigen/src/Cholesky/LLT.h"
        instantiation of "bool Eigen::internal::LLT_Traits<MatrixType, 1>::inplace_decomposition(MatrixType &) [with MatrixType=Eigen::Matrix<double, -1, -1, 0, -1, -1>]" at line 311 of "eigen/Eigen/src/Cholesky/LLT.h"
        instantiation of "Eigen::LLT<_MatrixType, _UpLo> &Eigen::LLT<_MatrixType, _UpLo>::compute(const Eigen::LLT<_MatrixType, _UpLo>::MatrixType &) [with _MatrixType=Eigen::Matrix<double, -1, -1, 0, -1, -1>, _UpLo=1]" at line 101 of "eigen/Eigen/src/Cholesky/LLT.h"
        instantiation of "Eigen::LLT<_MatrixType, _UpLo>::LLT(const Eigen::LLT<_MatrixType, _UpLo>::MatrixType &) [with _MatrixType=Eigen::Matrix<double, -1, -1, 0, -1, -1>, _UpLo=1]" at line 373 of "eigen/Eigen/src/Cholesky/LLT.h"
        instantiation of "const Eigen::LLT<Eigen::Matrix<Eigen::internal::traits<Derived>::Scalar, Eigen::internal::traits<Derived>::RowsAtCompileTime, Eigen::internal::traits<Derived>::ColsAtCompileTime, <expression>, Eigen::internal::traits<Derived>::MaxRowsAtCompileTime, Eigen::internal::traits<Derived>::MaxColsAtCompileTime>, 1> Eigen::MatrixBase<Derived>::llt() const [with Derived=Eigen::Matrix<double, -1, -1, 0, -1, -1>]" at line 66 of "generators.cpp"

【问题讨论】:

我看不到任何'特殊语法'?!?你的意思是&lt;&gt;尖括号中的模板参数规范吗? 所谓特殊语法,是指使用intel编译器编译c++程序的方式,这里是来自eigen的源代码。有关系吗? 您包含的错误信息不完整,这只是一个片段。请包含完整的第一条错误消息。 (第一条消息是最重要的,因为以下错误可能是级联故障。) 最可能的解释(没有看到完整的错误消息)是英特尔编译器使用了不同的包含路径。 2&gt; errors.txt 添加到命令行以将错误写入名为errors.txt 的文件中。 (并从命令行中删除分号。它是一个命令分隔符,如果您只运行一个命令,则根本不需要它。) 【参考方案1】:

正如 cmets 中所讨论的,这些警告/错误是由旧版本的 Eigen 引起的。升级 Eigen 解决了这个问题。

【讨论】:

以上是关于在 Linux 服务器上编译 C++ 程序时 Intel 编译器的语法的主要内容,如果未能解决你的问题,请参考以下文章

VRPN C++ 代码可在 Linux 上编译,但不能在 Windows 上编译

在 Linux 上编译 c++ 应用程序并在 TI TIVA TM4C123GH6PM 上烧写它

C++/LapackE 代码在 Windows 上编译良好,但相同的代码在 Linux 上编译失败

使用 cmake 在 windows 上编译 c++ 数据库时出错

在 Windows 和 Linux 上编译 C++:ifdef 开关 [重复]

BFD_RELOC_64:使用 C++ 在 32 位 linux 上编译汇编器指令