Signal reçu du programme SIGILL, instruction illégale

J’utilise une machine Linux x86_64 pour construire mon programme. J’ai lié une bibliothèque partagée à un exécutable. Dans mon projet, j’appelle une fonction qui a déclaré vector dans la fonction. Mon programme est tué lorsque cette fonction est appelée. Lorsque vous déboguez via GDB ci-dessous, vous obtenez le résultat.

 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 

Est-ce que ce problème de compilation de ma bibliothèque partagée? Frappé ma tête assez dessus. S’il vous plaît aider.

-Chaks

Ajouter plus d’informations pour vos requêtes: Oui, la fonction que j’appelle File_ToText est une fonction virtuelle de la classe OC_Catalog_c. Une variable membre d’une autre classe a un object de classe OC_Catalog_c qui a également la fonction virtuelle File_ToText.En utilisant cet object, j’appelle la fonction File_ToText d’OC_Catlog_c de la fonction virtuelle File_ToText. Je vais montrer un extrait de code:

 class Oc_Catalog_c { virtual vector File_ToText (void) const; } class B { const OC_Catalog_c* m_pCatalog; virtual vector File_ToText (void) const; } vector B::File_ToText( void ) const { vector a_SubData; a_SubData = m_pCatalog->File_ToText(); } 

Merci beaucoup pour votre aide. J’ai finalement compris le problème à l’origine de cette erreur.
Déboguer plus et suivre l’instruction j’ai trouvé que ce programme échouait à l’instruction ud2a.
J’ignorais un avertissement “ne peut pas passer d’objects de type non-POD ‘struct sqlrw_request_cb’ via ‘…’, l’appel s’interrompt à l’exécution”.
Résoudre ces avertissements a résolu mon problème lié à SIGILL.
Plus d’explication sur ce lien: instruction ud2a provoquant SIGILL