Ich versuche, ein Objekt vom Typ ODE_vector zu einem Gürteltier vec im Armadillo so zu konvertieren, dass das neue Objekt der lineare algebraische Funktionalität der Armadillo-Bibliothek erben. Als ein einfaches Beispiel des Problems ich dies mit ist eine Demonstration eine C++ Array mit:fortgeschrittene Konstrukteure verwenden Array zu konvertieren vec
#include <iostream>
#include <random>
#include <armadillo>
using namespace std;
using namespace arma;
int main() {
double b1 = 0.2;
double b2 = 0.1;
const double state[2] = {b1, b2};
rowvec B(&state[0], 2);
cout << B << endl;
mat A(2,2); A.fill(0.2); A.diag().ones();
cout << A << endl;
cout << B(0) * A(0,0) << endl; // x
return 0;
}
Die Daten in b1 enthalten ist, und b2 wird in den Elementen B gespeichert, so dass dieses Skript laufen gibt die folgende:
0.2000
0.1000
1.0000 0.2000
0.2000 1.0000
0.2
wenn ich jedoch Linie x ersetzen oben mit
cout << B * A << endl;
bekomme ich Fehler darauf hindeutet, B die Standard Gürteltier lineare Algebra Funktionalität nicht geerbt hat:
[ 50%] Building CXX object CMakeFiles/untitled.dir/main.cpp.o
[100%] Linking CXX executable untitled
CMakeFiles/untitled.dir/main.cpp.o: In function `void arma::blas::gemv<double>(char const*, int const*, int const*, double const*, double const*, int const*, double const*, int const*, double const*, double*, int const*)':
/usr/include/armadillo_bits/wrapper_blas.hpp:36: undefined reference to `wrapper_dgemv_'
CMakeFiles/untitled.dir/main.cpp.o: In function `void arma::blas::gemm<double>(char const*, char const*, int const*, int const*, int const*, double const*, double const*, int const*, double const*, int const*, double const*, double*, int const*)':
/usr/include/armadillo_bits/wrapper_blas.hpp:71: undefined reference to `wrapper_dgemm_'
collect2: error: ld returned 1 exit status
CMakeFiles/untitled.dir/build.make:94: recipe for target 'untitled' failed
make[3]: *** [untitled] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/untitled.dir/all' failed
make[2]: *** [CMakeFiles/untitled.dir/all] Error 2
CMakeFiles/Makefile2:79: recipe for target 'CMakeFiles/untitled.dir/rule' failed
make[1]: *** [CMakeFiles/untitled.dir/rule] Error 2
Makefile:118: recipe for target 'untitled' failed
make: *** [untitled] Error 2
Kann mir jemand erklären, wie man richtig die erweiterten Konstrukteure (arma documentation) verwenden, um diese Funktion zu erhalten?
Danke
Ich wünschte, es so einfach wäre !! Ich habe verschiedene Kombinationen von Gürteltier-Klassen ausprobiert, aber das löst das Problem nicht. Ich werde die Frage bearbeiten, um Verwirrung zu vermeiden und danke für den Vorschlag. –
Sind Sie sicher, dass BLAS in Ihrem Build aktiviert ist? Für mich sind die beiden Alternativen der Linie ‚x‘ oben hat gut funktioniert. –
Sie haben Recht! es war nicht richtig verbunden sind, war es ein CMake Problem ... Wenn jemand anderes, wenn die ähnliche Probleme auf diesen Link finden Sie unter: https://intellij-support.jetbrains.com/hc/en-us/community/posts/205823019 -Error-Compiling-Code-mit-Gürteltier DANKE FÜR DIE HILFE !! –