2016-07-11 31 views
0

Ich schreibe ein Modul, das von einem Programm geladen wird, um Funktionalität hinzuzufügen, und ich bin über einen wirklich seltsamen Absturz gestolpert, den ich nicht verstehen kann.Plugin mit Eigen stürzt beim zweiten Mal ab

Zunächst einmal habe ich genau die gleiche Sache in Windows mit MSVS2015 kompiliert, wo es ohne Probleme funktioniert. Wenn ich es jedoch mit GCC 4.9.3 unter Unix (Solaris 10) kompiliere, stürzt die Sitzung beim zweiten Ausführen des Codes ab, und ich habe es auf mehr oder weniger genau eingegrenzt, was es stürzt: Kopieren von Eigen :: MatrixXf-Objekten.

ein sehr einfaches Beispiel, das es Absturz macht, ist die folgende:

void entry() 
{ 
    // Initialize matrix1 
    Eigen::MatrixXf test(3, 3); 

    // Fill it with 3x3 values. 
    test << 1, 2, 3, 4, 5, 6, 7, 8, 9; 

    // Initialize matrix2 
    Eigen::MatrixXf test2(3, 3); 

    // Copy 
    test2 = test; 
} 

jedoch alles, was, nicht beinhalten Kopieren scheint Matrizen völlig in Ordnung zu arbeiten, und wenn ich bauen ein sehr einfaches ausführbares Programm, ich kann Arrays fein kopieren.

Ich habe es geschafft, die Argumente in meinem Makefile zu verengen, aber es gibt keinen Unterschied:

CC_FLAGS = -I$(INC) -fPIC 
LINK_FLAGS = -shared 

ich aus Ideen wirklich bin, was die Ursache dafür sein könnte, also bin ich hoffend, dass jemand mir in die richtige Richtung zeigen kann. Ich bin ziemlich neu in Unix-Entwicklung und nicht sicher, was der beste Weg, um dies zu debuggen wäre, so Hilfe dort ist auch geschätzt.

Wert ist, dass ich die Version von gcc selbst bauen musste, da es keine offizielle Binärdatei für Solaris 10 (x86) gab, aber es gab keine Fehler und es funktioniert sehr gut für alles andere als das.

Danke!

+0

Welche Version von Eigen? –

+0

Sorry, ich habe vergessen, das zu erwähnen. Es ist die neueste stabile Version: 3.2.8. –

+1

Ich kann es nicht mit gcc 4.9.2 auf Ubuntu reproduzieren. Kannst du ein [MCVE] erstellen? –

Antwort

0

Seltsamerweise löste das Kompilieren mit Optimierung (-O2/-O3) dieses Problem.