boost :: gregorian :: date :: date中的非法指令

时间:2018-03-05 19:40:05

标签: c++ boost illegal-instruction

我有使用boost的C ++程序(主要是Logger)。这个程序在Windows和Ubuntu上编译和运行良好。但是,当我尝试在嵌入式系统(Intel Atom处理器)上将其移植到Linux Yocto时,我在运行时遇到了非法指令错误。

该程序本身是在带有Intel-i5的Ubuntu PC上构建的。

我调试了这个问题,它是来自另一个库(OpenCV)的一些AVX指令。我禁用了所有AVX并解决了问题,但发生了另一个问题。

它现在告诉我(在使用gdb阅读核心哑巴之后):

  

程序终止,信号SIGILL,非法指令。   boost :: gregorian :: date :: date中的0x00007fe1aed03ade(boost :: gregorian :: greg_year,   boost :: gregorian :: greg_month,boost :: gregorian :: greg_day)()

  • 我没有明确使用boost::gregorian::date
  • boost::gregorian::date是否可能使用一些优化的insruction?!像SSE还是AVX? (似乎不合逻辑)
  • 关于这个问题的任何线索?

P.S。错误发生在运行时之前。在我收到错误之前,即使主函数第一行的cout也没有执行。所以,我怀疑在boost中有一些static constructor会导致问题,因为我的代码中没有静态构造函数。

修改

所有librires和程序本身都使用-march=bonnell -mno-avx -O2

进行编译

0 个答案:

没有答案