我有使用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