程序接收信号SIGILL,非法指令

时间:2013-08-23 19:19:10

标签: c++ linux g++ shared-libraries runtime-error

我正在使用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();
}

1 个答案:

答案 0 :(得分:12)

谢谢大家的帮助。 我终于找到了造成这个错误的问题 调试更多并跟踪指令我发现程序在ud2a指令失败 我忽略了一个警告“警告:不能传递非POD类型的对象'struct sqlrw_request_cb'到'...';调用将在运行时中止”。
解决这些警告解决了我与SIGILL相关的问题 有关此链接的更多说明: ud2a instruction causing SIGILL