"非法指令"试图在Raspberry Pi上运行交叉编译的Qt(Windows)

时间:2016-03-29 19:07:55

标签: c++ qt raspberry-pi cross-compiling toolchain

我找到并阅读了question here,还有线程herehere,遗憾的是它仍然没有得到解决。 (虽然我使用了该主题中的所有提示尽可能多地提供信息)

问题是什么

有几天我一直试图找到一种能够交叉编译 Qt 的方法,因为我最近有一个,现在想学习如何编写一些基本的嵌入式代码应用。

我按照此处的教程进行操作: http://visualgdb.com/tutorials/raspberry/qt/embedded/

  • 我使用了一个干净的系统,我唯一需要安装的是一些依赖:apt-get install libudev-dev libinput-dev libts-dev libxcb*(第一次运行它,configure说错过了 LIBS)
  • 分别来自here 2015-11-21-raspbian-jessieraspberry-gcc-4.9.2-r2.exe
  • 的Raspbian图片和工具链
  • Qt源也来自上面教程中的链接(qt-everywhere-opensource-src-5.5.0.tar.xz
  • 我使用了相同的文件路径等,所以所有命令都应该没问题,包括配置:../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

我还能提供什么......

  • 关注the thread I mentioned at the beginning,此处为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 ./cube然后run使用 gdb 运行应用。输出是:

    (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
    
  • 编译器本身作为交叉编译工作 - 我能够在Windows上构建C ++ Hello World,使用C:\SysGCC\Raspberry\bin\arm-linux-gnueabihf-g++.exe进行编译,然后在Raspberry上运行

  • 我甚至能够正确配置Qt Creator,使用arm-linux-gnueabihf-g++.exe作为编译器,C:\SysGCC\Raspberry\arm-linux-gnueabihf\sysroot\usr\local\qt5\bin\qmake.exe作为 qmake - 基本的opengl项目构建正常,甚至远程部署到raspi工作:) ...对非法指令的怜悯"

  • 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位

提前感谢您的帮助。当然,如果需要,我会提供任何必要的信息。

说真的,我尝试了一个星期,已经在wiki.qt.io wiki.qt.io已经失败了类似Linux的东西尽管如此,我真的很期待为Windows中的Raspberry开发一个强大的,交叉编译的,远程部署的Qt环境:)

1 个答案:

答案 0 :(得分:2)

嗯,事实证明这是非常明显的。这里的教程:http://visualgdb.com/tutorials/raspberry/qt/embedded/是为Raspberry Pi 2制作的,虽然没有明确提及

幸运的是,您只需将配置脚本从-device linux-rasp-pi2-g++更改为-device linux-rasp-pi-g++

即可

我很惊讶,但显然它对我来说很完美。

所以现在配置行应如下所示:

../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(我根本不确定),你可以比较规格和外围设备herehere