Używam komputera z systemem Linux x86_64 do zbudowania mojego programu. Połączyłem udostępnioną bibliotekę z plikiem wykonywalnym. W moim projekcie wywołuje funkcję, która zadeklarowała vector<string>
wewnątrz funkcji. Mój program zostanie zabity, gdy ta funkcja zostanie wywołana. Gdy debugowanie przez GDB poniżej jest wyjściem, które otrzymuję.Program otrzymany sygnał SIGILL, Nielegalna instrukcja
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
Czy to jest problem z kompilacją mojej udostępnionej biblioteki? Uderzyłem w głowę na tyle. Proszę pomóż.
-Chaks
Dodajesz więcej informacji o zapytaniach: Tak, funkcja Wołam File_ToText jest funkcją wirtualną w klasie OC_Catalog_c. Zmienna składowa innej klasy ma obiekt klasy OC_Catalog_c, który również posiada funkcję wirtualną File_ToText.Użytkowanie tego obiektu wywołuje funkcję File_ToText z OC_Catlog_c z funkcji wirtualnej File_ToText. pokażę fragment kodu:
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();
}
Zacznij od wklejenia fragmentu na początek, i powiedz więcej o bibliotece. – lpapp
Jakie opcje są używane podczas kompilacji za pomocą g ++? Czy budujesz także wspólną bibliotekę, czy dostałeś ją gdzieś indziej? – idfah
Przydałoby się również wiedzieć, na którym procesorze pracujesz, i jakiej wersji dystrybucji używasz Linuksa. – cordoro