"Незаконная инструкция" при попытке запустить кросс-скомпилированный Qt на Raspberry Pi (Windows)
я нашел и прочитал вопрос, а также темы здесь и здесь, к сожалению, он все еще остается нерешенным. (хотя я использовал все советы из этой темы, чтобы дать как можно больше информации)
в чем проблема
в течение нескольких дней я пытался найти способ, чтобы бо смог скомпилировать Qt, как я недавно получил один и теперь хотел узнать, как кодировать некоторые основные встроенные приложения.
я следую учебник здесь: http://visualgdb.com/tutorials/raspberry/qt/embedded/
- я использовал чистую систему, единственное, что мне пришлось установить, были некоторые depedencies:
apt-get install libudev-dev libinput-dev libts-dev libxcb*
(запуск его в первый раз,configure
говорил о пропавших без вести libs) - получил изображение Raspbian и toolchain от здесь, соответственно
2015-11-21-raspbian-jessie
иraspberry-gcc-4.9.2-r2.exe
- в Qt источник также исходит из ссылки в учебнике выше (
qt-everywhere-opensource-src-5.5.0.tar.xz
) - я использовал те же пути к файлам и т. д., Поэтому все команды должны быть в порядке, включая configure:
../qt-everywhere-opensource-src-5.5.0/configure -platform win32-g++ -xplatform linux-arm-gnueabi-g++ -release -opengl es2 -device linux-rasp-pi2-g++ -sysroot C:/SysGCC/Raspberry/arm-linux-gnueabihf/sysroot -prefix /usr/local/qt5 -device-option CROSS_COMPILE=C:/SysGCC/Raspberry/bin/arm-linux-gnueabihf- -qt-xcb
после нескольких часов все было построено, предположительно, без ошибок. (мой вывод был более менее таким же, как на скриншотах в учебнике)
однако, пытаясь запустить любой из построенных примеров, приводит только к одной строке: Illegal instruction
что еще я могу предоставить...
-
после поток, который я упомянул в начале, вот
file
выход:root@raspberrypi:/usr/local/qt5/examples/opengl/cube# file cube cube: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 2.6.32, BuildID[sha1]=e4c51318d4ca583ace647510c9b4cddd06a34e19, stripped
-
я попытался запустить приложение с gdb используя
gdb ./cube
а тоrun
. Вывод:(gdb) run Starting program: /usr/local/qt5/examples/opengl/cube/cube [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/arm-linux-gnueabihf/libthread_db.so.1". Program received signal SIGILL, Illegal instruction. 0xb6249734 in QMutex::lock() () from /usr/local/qt5/lib/libQt5Core.so.5 (gdb) Quit
сам компилятор работает как кросс-компиляция - я могу построить C++ Hello World на windows, компиляция с использованием
C:SysGCCRaspberrybinarm-linux-gnueabihf-g++.exe
и затем запустить его на Raspberryя даже смог правильно настроить Qt Creator, используя
arm-linux-gnueabihf-g++.exe
как компилятор иC:SysGCCRaspberryarm-linux-gnueabihfsysrootusrlocalqt5binqmake.exe
as qmake в - основной проект opengl строит отлично, даже удаленное развертывание в raspi works:) ... жаль, что "незаконная инструкция"-
Raspbian:
Linux raspberrypi 4.1.19+ #858 Tue Mar 15 15:52:03 GMT 2016 armv6l GNU/Linux
root@raspberrypi:/# lsb_release -a No LSB modules are available. Distributor ID: Raspbian Description: Raspbian GNU/Linux 8.0 (jessie) Release: 8.0 Codename: jessie
Windows 7 64 бит
заранее спасибо за любую помощь. Конечно, я дам любую необходимую информацию, если понадобится.
серьезно, я пытаюсь на неделю, уже не с Linux-подобных материалов на Вики.в Qt.Ио Вики.в Qt.Ио тем не менее, я действительно с нетерпением жду создания надежной, кросс-компиляции, удаленного развертывания среды Qt для будущего развития на моей малине из Windows :)
1 ответов
Ну, это оказалось смущающе очевидным. Учебник здесь:http://visualgdb.com/tutorials/raspberry/qt/embedded/ сделано для Raspberry Pi 2, хотя это не упоминается
к счастью, вам просто нужно изменить настройки скрипта -device linux-rasp-pi2-g++
to -device linux-rasp-pi-g++
Я был удивлен, но, по-видимому, это сработало отлично для меня.
Итак, теперь строка configure должна выглядеть так это:
../qt-everywhere-opensource-src-5.5.0/configure -platform win32-g++ -xplatform linux-arm-gnueabi-g++ -release -opengl es2 -device linux-rasp-pi-g++ -sysroot C:/SysGCC/Raspberry/arm-linux-gnueabihf/sysroot -prefix /usr/local/qt5 -device-option CROSS_COMPILE=C:/SysGCC/Raspberry/bin/arm-linux-gnueabihf- -qt-xcb
спасибо @Bugfinger за подсказку :)
PS. Если вы не знаете, какая версия RPi у вас есть (я не был уверен вообще), вы можете сравнить спецификации и периферийные устройства здесь или здесь