"Незаконная инструкция" при попытке запустить кросс-скомпилированный 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 у вас есть (я не был уверен вообще), вы можете сравнить спецификации и периферийные устройства здесь или здесь