Programme du signal reçu SIGILL, instruction Illégale
J'utilise Linux x86_64 machine à construire mon programme.
J'ai lié une bibliothèque partagée pour un fichier exécutable. Dans mon projet, je suis à l'appel d'une fonction qui a déclaré vector<string>
l'intérieur de la fonction. Mon programme est tuée lorsque cette fonction est appelée.
Lors du débogage via GDB ci-dessous est le résultat que j'obtiens.
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 problème de compilation de ma bibliothèque partagée??
Cogné la tête assez sur elle. S'il vous plaît aider.
-Chaks
L'ajout de plus d'informations pour vos requêtes:
Oui,la fonction que j'appelle File_ToText est une fonction virtuelle dans la classe OC_Catalog_c.
Une variable membre de la classe a un objet de la classe OC_Catalog_c qui ont aussi une fonction virtuelle File_ToText.À l'aide de cet objet que j'appelle File_ToText fonction de OC_Catlog_c de fonction virtuelle File_ToText.
Je vais vous montrer un extrait de code:
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();
}
Quelles sont les options que vous utilisez lors de la compilation avec g++? Vous êtes à la construction de la bibliothèque partagée ou l'avez-vous quelque part d'autre?
Il pourrait également être utile de savoir quel processeur vous sont en cours d'exécution, et qui distro linux et la version que vous utilisez.
Son processeur Intel Xeon. Je suis la construction des bibliothèques partagées également. Les appels de fonction sont dans la bibliothèque partagée. Je suis à l'aide de automake pour construire mon projet d'options de la plupart des options par défaut. J'ai fait une bibliothèque partagée par la liaison entre les différents statiques des bibliothèques. Chaque statiques des bibliothèques a ces options: AM_LIBTOOLFLAGS = --tag=-statique et-fPIC à dire en particulier.
Quelqu'un peut-il donner à votre suggestion sur la façon de déboguer ce problème. N'obtenant aucune idée où est le problème...s'il vous Plaît suggérer.
OriginalL'auteur Chaks | 2013-08-23
Vous devez vous connecter pour publier un commentaire.
Merci les gars pour votre aide.
J'ai enfin trouvé le problème qui était à l'origine de cette erreur.
Débogage de plus et de suivi les instructions, j'ai trouvé que le programme n'était pas à ud2a instruction.
J'ai été d'ignorer un avertissement "avertissement: impossible de passer des objets de la non-POD type 'struct sqlrw_request_cb' par '...'; appel d'abandonner au moment de l'exécution".
La résolution de ces avertissements fixé mon problème lié à SIGILL.
Plus d'explication sur ce lien:
ud2a instruction provoquant SIGILL
Une fois j'ai fait face à cette erreur, si le type de retour de ma fonction était
std::vector<std::string>
mais j'ai raté l'instruction de retour dans ma fonction, et a ignoré l'avertissement du compilateur par erreur! 😀OriginalL'auteur Chaks