【问题标题】:Program received signal SIGILL, Illegal instruction程序接收信号 SIGILL,非法指令
【发布时间】:2013-08-26 22:46:02
【问题描述】:

我正在使用 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

这是我的共享库编译的问题吗? 把我的头撞得够呛。请帮忙。

-查克斯

为您的查询添加更多信息: 是的,我调用 File_ToText 的函数是 OC_Catalog_c 类中的虚函数。 其他类的成员变量具有类 OC_Catalog_c 的对象,该对象也具有虚函数 File_ToText。使用该对象,我正在从虚函数 File_ToText 调用 OC_Catlog_c 的 File_ToText 函数。 我将显示一个代码sn-p:

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();
}

【问题讨论】:

  • 请先粘贴一个 sn-p 作为 starter,然后再详细介绍一下这个库。
  • 使用 g++ 编译时使用哪些选项?您是在构建共享库还是在其他地方获得它?
  • 了解您正在运行的处理器以及您正在使用的 linux 发行版和版本可能也很有用。
  • 它的英特尔至强处理器。我也在构建共享库。函数调用在共享库中。我正在使用 automake 来构建我的项目选项,大多数选项都是默认的。我通过链接各种静态库制作了一个共享库。每个静态库都有这些选项:AM_LIBTOOLFLAGS = --tag=-static 和 -fPIC 来具体说明。
  • 有人可以就如何调试此问题提出您的建议。不知道问题出在哪里...请提出建议。

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


【解决方案1】:

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

【讨论】:

  • 感谢您的链接。为我们节省了很多时间。
  • 当我的函数返回类型为std::vector&lt;std::string&gt; 时遇到此错误,但我错过了函数中的return 语句并错误地忽略了编译器的警告! :D
  • @Sam 我也可以确认忘记返回语句可能是它的原因。我用 clang-11.1.0 编译并从 LLDB 得到完全相同的消息。
  • 是的,似乎没有其他人注意到 vector&lt;string&gt; B::File_ToText( void ) const 函数没有返回任何内容
猜你喜欢
  • 1970-01-01
  • 2017-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多