在 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"
【问题讨论】:
我看不到任何'特殊语法'?!?你的意思是<>
尖括号中的模板参数规范吗?
所谓特殊语法,是指使用intel编译器编译c++程序的方式,这里是来自eigen的源代码。有关系吗?
您包含的错误信息不完整,这只是一个片段。请包含完整的第一条错误消息。 (第一条消息是最重要的,因为以下错误可能是级联故障。)
最可能的解释(没有看到完整的错误消息)是英特尔编译器使用了不同的包含路径。
将2> 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++ 数据库时出错