2016-10-01 9 views
-1

Ich bin erfolgreich in der Lage, Eigen auf Cygwin mit Mingw Compiler kompilieren.Eigen Bibliothek Kompilierung Fehler mit Intel Compiler auf Linux

Beim Kompilieren auf Linux mit Intel C++ Compiler, erhalte ich den folgenden Fehler.

Ich verwende die Eigenbibliothek, um AX = B zu lösen.

Ich verwende Eigen3.3-rc1.

eine Idee, wie das zu beheben?

Danke.

./Eigen/src/Core/CoreEvaluators.h(491): Fehler: Aufruf eines Objekts, einer Klasse Typ ohne entsprechenden Operator() oder Konvertierungsfunktionen Zeiger-auf-Funktionstyp return m_wrapper (m_functor, index); erkannt während: Instanziierung von "Eigen :: CwiseNullaryOp :: CoeffReturnType Eigen :: internal :: evaluator> :: coeff (IndexType) const [mit NullaryOp = Eigen :: internal :: scalar_constant_op, PlainObjectType = Eigen :: Matrix, IndexType = lang] "in Zeile 637 von" ./Eigen/src/Core/AssignEvaluator.h " . . . Fehler wird fortgesetzt

Edit: Größere Fehlermeldung lautet wie folgt.

./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" 

Hier ist der relevante Code, Eigen verwendet

#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

Alle Komponententests können problemlos mit ICC kompiliert werden. Zeigen Sie daher die Codezeile an, die dieses Problem auslöst. – ggael

+0

Frage bearbeitet, um den relevanten Code und auch eine größere Fehlermeldung einzuschließen. –

+0

Ihr Beispiel kompiliert sich hier gut mit ICC 16.0.2 und Eigen 3.3-rc1. – ggael

Antwort

0

Typische C++ Problem. C++ erlaubt die Definition von "Funktionsobjekten" mit überladenen "()" Operatoren, die den Aufruf erlauben. Es erlaubt auch Vorlagen. Irgendwo im Zusammenspiel von Operatorauflösung und Templates ist etwas falsch gelaufen, entweder im Compiler oder im Code. Es wird jetzt schwierig sein, sich zu entwirren. Das Ganze wird so in Objektorientierung und generische Programmierkonstrukte eingebettet sein, dass es schwierig sein wird, das Problem zu isolieren. Beginnen Sie jedoch mit der Zeile, in der der Fehler generiert wird, und versuchen Sie zu sehen, wo der Code versucht, den Operator() für das Objekt zu definieren.

+0

Ich benutze eine externe Bibliothek und bin nicht vertraut mit dem Code, so dass es für mich sehr schwierig wäre, die Ursache des Problems zu identifizieren. Ich versuche immer noch herauszufinden, wie das Problem gelöst werden kann. –

Verwandte Themen