У меня есть программа 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? (кажется нелогичным)Постскриптум ошибка возникает во время выполнения, прежде чем что-либо еще. Даже cout
В первой строке основная функция не выполняется до того, как я получил ошибку. Итак, я подозреваю, что некоторые static constructor
Внутренняя поддержка вызывает проблему, поскольку в моем коде нет статического конструктора.
Редактировать:
Все библиотеки и сама программа скомпилированы с -march=bonnell -mno-avx -O2
Задача ещё не решена.
Других решений пока нет …