ich so ein Eigen/dichtes Objekt in einer Struktur verwenden möchten:boost :: Python und Eigen/dichte einen Segmentation Fault erstellen
#include <boost/python.hpp>
#include <Eigen/Dense>
#include <iostream>
#include <vector>
struct data_t {
Eigen::Matrix2f matrix;
//std::vector<float> matrix;
};
data_t init_data() {
data_t result;
result.matrix(0, 0) = 1.0f;
result.matrix(0, 1) = 2.0f;
result.matrix(1, 0) = 3.0f;
result.matrix(1, 1) = 4.0f;
//result.matrix.push_back(1.0f);
//result.matrix.push_back(2.0f);
//result.matrix.push_back(3.0f);
//result.matrix.push_back(4.0f);
return result;
}
BOOST_PYTHON_MODULE(python_test) {
boost::python::class_<data_t>("DataType")
.def("from_init", &init_data)
.staticmethod("from_init")
;
}
Der Python-Code wie folgt aussieht:
import python_test
def init_data():
return python_test.DataType.from_init()
sample = init_data()
Die Ausführung verursacht einen Segmentierungsfehler. Meine Frage ist: Warum? Wenn ich das Eigen-Objekt durch einen std :: vector ersetze, läuft der Code gut.
Die follwong funktioniert: struct data_t {Eigen :: MatrixXf Matrix;}; und: data_t init_data() { data_t Ergebnis; result.matrix = Eigen :: Matrix2f(); Ergebnis.Matrix (0, 0) = 1.0f; Ergebnis.Matrix (0, 1) = 2.0f; Ergebnis.Matrix (1, 0) = 3.0f; Ergebnis.Matrix (1, 1) = 4.0f; Ergebnis zurückgeben; } – Michael
Ich vermute, das Problem ist, dass eine feste Größe Eigen-Objekt intern von Wert an eine boost :: python-Funktion während der Rückgabeanweisung übergeben wird. (http://eigen.tuxfamily.org/dox-devel/group__TopicPassingByValue.html) – Michael
Sie können versuchen, statische Ausrichtung mit '-D EIGEN_MAX_STATIC_ALIGN_BYTES = 0' zu deaktivieren – chtz