2016-10-01 9 views
-1

mingwコンパイラを使ってcygwinでEigenをコンパイルすることに成功しました。Linux上のintelコンパイラによる固有ライブラリのコンパイルエラー

linuxでintel C++コンパイラでコンパイルすると、次のエラーが発生します。

私はEigenライブラリを使ってAX = Bを解いています。

私はEigen3.3-rc1を使用しています。

これを修正する方法はありますか?

ありがとうございました。

./Eigen/src/Core/CoreEvaluators.h(491):エラー:適切な演算子()または関数へのポインタするタイプ 戻りm_wrapper変換関数なしでクラスタイプのオブジェクトの呼び出し( m_functor、index); が検出されました。 "Eigen :: CwiseNullaryOp :: CoeffReturnType Eigen :: internal :: evaluator :: coeff(IndexType)const"のインスタンス化:NullaryOp = Eigen :: internal :: scalar_constant_op、PlainObjectType = Eigen :: Matrix、IndexType = long]」。「./Eigen/src/Core/AssignEvaluator.h」の行637で 。 。 。 エラーが続く

編集:大きなエラーメッセージは次のとおりです。ここで

./Eigen/src/Core/CoreEvaluators.h(491): error: call of an object of a class type without appropriate operator() or conversion functions to pointer-to-function type 
    return m_wrapper(m_functor,index); 
     ^
     detected during: 
     instantiation of "Eigen::CwiseNullaryOp<NullaryOp, PlainObjectType>::CoeffReturnType Eigen::internal::evaluator<Eigen::CwiseNullaryOp<NullaryOp, PlainObjectType>>::coeff(IndexType) const [with NullaryOp=Eigen::internal::scalar_constant_op<double>, PlainObjectType=Eigen::Matrix<double, -1, 1, 0, -1, 1>, IndexType=long]" at line 637 of "./Eigen/src/Core/AssignEvaluator.h" 
     instantiation of "void Eigen::internal::generic_dense_assignment_kernel<DstEvaluatorTypeT, SrcEvaluatorTypeT, Functor, Version>::assignCoeff(Eigen::Index={ptrdiff_t={long}}) [with DstEvaluatorTypeT=Eigen::internal::evaluator<Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Map<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 0, Eigen::Stride<0, 0>>, -1, -1, false>, -1, 1, true>, -1, 1, false>>, 
        SrcEvaluatorTypeT=Eigen::internal::evaluator<Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, -1, 1, 0, -1, 1>>>, Functor=Eigen::internal::div_assign_op<double, double>, Version=0]" at line 390 of "./Eigen/src/Core/AssignEvaluator.h" 
     instantiation of "void Eigen::internal::unaligned_dense_assignment_loop<false>::run(Kernel &, Eigen::Index={ptrdiff_t={long}}, Eigen::Index={ptrdiff_t={long}}) [with Kernel=Eigen::internal::generic_dense_assignment_kernel<Eigen::internal::evaluator<Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Map<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 0, Eigen::Stride<0, 0>>, -1, -1, false>, -1, 1, true>, -1, 1, false>>, 
        Eigen::internal::evaluator<Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, -1, 1, 0, -1, 1>>>, Eigen::internal::div_assign_op<double, double>, 0>]" at line 413 of "./Eigen/src/Core/AssignEvaluator.h" 
     instantiation of "void Eigen::internal::dense_assignment_loop<Kernel, 3, 0>::run(Kernel &) [with Kernel=Eigen::internal::generic_dense_assignment_kernel<Eigen::internal::evaluator<Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Map<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 0, Eigen::Stride<0, 0>>, -1, -1, false>, -1, 1, true>, -1, 1, false>>, Eigen::internal::evaluator<Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, -1, 1, 0, -1, 1>>>, 
        Eigen::internal::div_assign_op<double, double>, 0>]" at line 713 of "./Eigen/src/Core/AssignEvaluator.h" 
     instantiation of "void Eigen::internal::call_dense_assignment_loop(const DstXprType &, const SrcXprType &, const Functor &) [with DstXprType=Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Map<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 0, Eigen::Stride<0, 0>>, -1, -1, false>, -1, 1, true>, -1, 1, false>, SrcXprType=Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, -1, 1, 0, -1, 1>>, Functor=Eigen::internal::div_assign_op<double, double>]" at line 
        862 of "./Eigen/src/Core/AssignEvaluator.h" 
     [ 6 instantiation contexts not shown ] 
     instantiation of "void Eigen::internal::partial_lu_inplace(MatrixType &, TranspositionType &, TranspositionType::StorageIndex &) [with MatrixType=Eigen::Matrix<double, -1, -1, 0, -1, -1>, TranspositionType=Eigen::Transpositions<-1, -1, int>]" at line 530 of "./Eigen/src/LU/PartialPivLU.h" 
     instantiation of "void Eigen::PartialPivLU<_MatrixType>::compute() [with _MatrixType=Eigen::Matrix<double, -1, -1, 0, -1, -1>]" at line 131 of "./Eigen/src/LU/PartialPivLU.h" 
     instantiation of "Eigen::PartialPivLU<_MatrixType> &Eigen::PartialPivLU<_MatrixType>::compute(const Eigen::EigenBase<OtherDerived> &) [with _MatrixType=Eigen::Matrix<double, -1, -1, 0, -1, -1>, InputType=Eigen::Matrix<double, -1, -1, 0, -1, -1>]" at line 323 of "./Eigen/src/LU/PartialPivLU.h" 
     instantiation of "Eigen::PartialPivLU<_MatrixType>::PartialPivLU(const Eigen::EigenBase<OtherDerived> &) [with _MatrixType=Eigen::Matrix<double, -1, -1, 0, -1, -1>, InputType=Eigen::Matrix<double, -1, -1, 0, -1, -1>]" at line 606 of "./Eigen/src/LU/PartialPivLU.h" 
     instantiation of "const Eigen::PartialPivLU<Eigen::DenseBase<Derived>::PlainObject> Eigen::MatrixBase<Derived>::lu() const [with Derived=Eigen::Matrix<double, -1, -1, 0, -1, -1>]" at line 245 of "Matrix.cpp" 

は固有

#include <Eigen/Eigen> 
using Eigen::MatrixXd; 
using Eigen::VectorXd; 

int solveAXBEigen(double *a, double *b, double *x, int n) { 
    MatrixXd A(n, n); 
    for (int i = 0; i < n; i++) { 
     for (int j = 0; j < n; j++) { 
      A(i, j) = a[n * i + j]; 
     } 
    } 
    VectorXd B(n); 
    for (int i = 0; i < n; i++) { 
     B(i) = b[i]; 
    } 
    VectorXd X = A.lu().solve(B); 
    for (int i = 0; i < n; i++) { 
     x[i] = X(i); 
    } 
    return 0; 
} 
+1

すべての単体テストはICCでコンパイルされますので、この問題を引き起こすコード行を示してください。 – ggael

+0

質問は関連するコードと大きなエラーメッセージのトレイルを含むように編集されました。 –

+0

ここでは、ICC 16.0.2とEigen 3.3-rc1でコンパイルしても問題ありません。 – ggael

答えて

0

典型的なC++の問題を使用して、関連するコードです。 C++では、オーバーロードされた "()"演算子を使って "関数オブジェクト"を定義し、呼び出すことができます。それはテンプレートも許可します。演算子の解像度とテンプレートのやりとりのどこかで、コンパイラやコードの中で何かが間違っています。それは今、解きほぐしにくいものになるでしょう。オブジェクト指向プログラミングと包括的なプログラミングのコンストラクトでは、問題を分離するのが難しくなるので、すべてが包括されます。ただし、エラーが生成された行から開始し、コードがそのオブジェクトの()演算子を定義しようとする場所を確認してください。

+0

私は外部ライブラリを使用しており、コードに精通していないので、問題の原因を特定することは非常に困難です。まだ解決しようとしている..どのように問題を解決するには? –

関連する問題