Недопустимая инструкция в надстройке:: григорианский:: дата:: дата
У меня есть программа C++, которая использует boost (в основном Logger). Эта программа компилируется и хорошо работает на Windows и Ubuntu. Однако, когда я пытаюсь перенести его на Linux Yocto на встроенной системе (процессор Intel Atom), во время выполнения я получаю ошибку недопустимых инструкций.
Сама программа построена на Ubuntu PC с Intel-i5.
Я отладил проблему, и это были некоторые инструкции AVX из другой библиотеки (OpenCV). Я отключил все AVX, и проблема решена, но возникла другая проблема.
Теперь он говорит мне, что (после прочтения ядра тупой с помощью gdb
):
Программа завершена с сигналом SIGILL, незаконное указание. 0x00007fe1aed03ade в 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
В первой строке основная функция не выполняется до того, как я получил ошибку. Итак, я подозреваю, что некоторые static constructor
Внутренняя поддержка вызывает проблему, поскольку в моем коде нет статического конструктора.
Редактировать:
Все библиотеки и сама программа скомпилированы с -march=bonnell -mno-avx -O2