2013-08-23 14 views
7

Ich benutze Linux x86_64 Maschine, um mein Programm zu bauen. Ich habe eine shared library mit einer ausführbaren Datei verknüpft. In meinem Projekt rufe ich eine Funktion auf, die innerhalb der Funktion vector<string> deklariert hat. Mein Programm wird beendet, wenn diese Funktion aufgerufen wird. Beim Debuggen über GDB unten ist die Ausgabe, die ich bekomme.Programm empfangenes Signal SIGILL, ungültige Anweisung

Program received signal SIGILL, Illegal instruction. 
0x00002aaaac4d2be7 in OC_Catalog_c::File_ToText (this=0x611aa0) at /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_vector.h:87 
87    : _Tp_alloc_type(__a), _M_start(0), _M_finish(0), _M_end_of_storage(0) 
(gdb) bt 
0 0x00002aaaac4d2be7 in OC_Catalog_c::File_ToText (this=0x611aa0) at /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_vector.h:87 

Ist diese Ausgabe der Kompilierung meiner freigegebenen Bibliothek? knallte meinen Kopf genug darauf. Bitte helfen Sie.

-Chaks

weitere Informationen für Ihre Fragen hinzu: Ja, Funktion, die ich File_ToText nenne ist eine virtuelle Funktion in der Klasse OC_Catalog_c. Eine Membervariable einer anderen Klasse hat ein Objekt der Klasse OC_Catalog_c, das auch die virtuelle Funktion File_ToText hat. Unter Verwendung dieses Objekts rufe ich die Funktion File_ToText von OC_Catlog_c aus der virtuellen Funktion File_ToText auf. Ich werde einen Code-Schnipsel zeigen:

class Oc_Catalog_c 
{ 
    virtual vector<string> File_ToText    (void) const; 
} 

class B 
{ 
    const OC_Catalog_c*   m_pCatalog; 
    virtual vector<string> File_ToText    (void) const; 
} 

vector<string> B::File_ToText(void) const 
{ 
    vector<string> a_SubData; 
    a_SubData = m_pCatalog->File_ToText(); 
} 
+0

Bitte starten Sie mit einem Code-Schnipsel für Starter einfügen, und mehr über die Bibliothek erzählen. – lpapp

+0

Welche Optionen verwenden Sie beim Kompilieren mit g ++? Bauen Sie auch die Shared Library oder haben Sie sie woanders bekommen? – idfah

+0

Es kann auch nützlich sein zu wissen, auf welchem ​​Prozessor Sie laufen und welche Linux Distribution und Version Sie verwenden. – cordoro

Antwort

9

Danke Jungs für Ihre Hilfe. Ich habe endlich das Problem herausgefunden, das diesen Fehler verursacht hat.
Debugging mehr und Nachverfolgung der Anweisung Ich fand, dass Programm bei Ud2a Befehl fehlgeschlagen ist.
Ich ignorierte eine Warnung "Warnung: kann Objekte des Nicht-POD-Typs 'struct sqlrw_request_cb' bis '...' nicht übergeben; Aufruf wird zur Laufzeit abgebrochen".
Das Auflösen dieser Warnungen behebt mein Problem mit SIGILL.
Weitere Erläuterungen zu diesem Link: ud2a instruction causing SIGILL

+0

Danke für den Link. Hat uns viel Zeit erspart. – naab

Verwandte Themen