我正在使用Linux x86_64机器构建我的程序。
我已经将一个共享库链接到可执行文件中。在我的项目中,我调用了一个在函数内部声明了vector<string>
的函数。当调用该函数时,我的程序被杀死。
通过GDB调试时,以下是我得到的输出。
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
这个问题是我的共享库编译的问题吗?我已经对它头疼了很久,请帮忙。
-Chaks
为了回答你的问题,我增加了一些信息: 是的,我调用的函数File_ToText是类OC_Catalog_c的一个虚函数。 另一个类的成员变量有一个OC_Catalog_c类的对象,该对象也有一个虚函数File_ToText。我使用那个对象从虚函数File_ToText中调用OC_Catlog_c的File_ToText函数。 以下是代码片段:
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();
}