1

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

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

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

它现在告诉我(在阅读核心愚蠢之后gdb):

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

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

PS该错误在运行时发生在其他任何事情之前。在我得到错误之前,即使cout在 main 函数的第一行也没有执行。因此,我怀疑某些static constructor内部 boost 会导致问题,因为我的代码中没有静态构造函数。

编辑:

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

4

0 回答 0