LINUX.ORG.RU

Illegal instruction при запуске проги на Qt

 ,


0

2

Привет.

Немного изменил core-image-sato добавив самодельный пакет с маленькой прогой на Qt в recipes-sato. Дистр собрался нормально, только при попытке запуска программы в QEMU (runqemu qemux86) выдает:

traps: app trap invalid opcode ip:496f02a6 sp:bfce97d0 error:0 in libQt5Gui.so.5.9.4
Illegal instruction

Код проги:

#include <QApplication>
#include <QMainWindow>

int main(int argc, char *argv[])
{
	QApplication app(argc, argv);
	QMainWindow w;
	w.show();
	return app.exec();
}
Собирал на платформу i586.

Ну и да, до этого еще собрал meta-toolchain-qt5



Последнее исправление: Fof (всего исправлений: 4)

Судя по всему, проблема в неправильной сборке библиотек Qt. А точнее, в коде библиотеки есть инструкции, которые не эмулируются эмулятором qemux86. Например, по какой-то причине во время сборки meta-toolchain-qt5 включились оптимизации вроде sse3 или 3dnow, но qemux86 не эмулирует эти расширения.

«Invalid opcode = invalid (most likely missing) instruction.»

© Povilas Staniulis

Вот в этой теме по похожей проблеме описано, как из сообщения вида opcode ip:496f02a6 sp:bfce97d0 error:0 in libQt5Gui.so.5.9.4 найти проблемную инструкцию, используя инструменты addr2line и objdump.

https://stackoverflow.com/questions/2179403/how-do-you-read-a-segfault-kernel...

Pravorskyi ★★★
()
Ответ на: комментарий от Pravorskyi

Не смог найти именно ту инструкцию, наверное что-то неправильно сделал, но совершенно случайно нашел инструкцию из SSSE3. Это значит нужно пересобирать тулчейн? Как это сделать, чтоб опять такого факапа не было? И как вообще такое могло случиться?

Fof
() автор топика

В виртуалбоксе завелось без проблем.

Fof
() автор топика
Ответ на: комментарий от annulen

Ну это понятно, просто думал что в yocto такие вещи из коробки.

Fof
() автор топика

Сменил процессор c pentium2 на core2duo в .qemuboot.conf и все заработало. Всем спасибо за помощь.

Fof
() автор топика
Ответ на: комментарий от Fof

А в чем вообще смысл эмуляции x86, если ты конечно не на ppc каком-нибудь сидишь? Я думал ты хочешь ограничить набор инструкций до i586, но оказывается что дело не в этом... Загадка!

annulen ★★★★★
()
Ответ на: комментарий от annulen

Все что я хочу пока что - это просто научиться пользоваться yocto. x86 там стояло по дефолту, пересобирать все на другую архитектуру еще раз не хочется.

Fof
() автор топика
Ответ на: комментарий от annulen

Да, но если потом играться с другими архитектурами, например ARM, ведь придется использовать эмулятор?

Fof
() автор топика
Ответ на: комментарий от annulen

К сожалению, пока что ничего. А что?

Fof
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.