"Illegal instruction" 在 Raspberry Pi 上尝试 运行 交叉编译 Qt (Windows)
"Illegal instruction" when trying to run cross-compiled Qt on Raspberry Pi (Windows)
我已经找到并阅读了question here, also threads here and here,不幸的是它仍然没有解决。 (虽然我使用了该线程中的所有提示来提供尽可能多的信息)
有什么问题
几天来,我一直在努力寻找一种能够交叉编译 Qt 的方法,因为我最近得到了一个,现在想学习如何编码一些基本的嵌入式应用程序。
我在这里学习教程: http://visualgdb.com/tutorials/raspberry/qt/embedded/
- 我使用了一个干净的系统,我唯一需要安装的是一些依赖项:
apt-get install libudev-dev libinput-dev libts-dev libxcb*
(运行第一次安装它,configure
说缺少
库)
- 分别从here和
raspberry-gcc-4.9.2-r2.exe
获得Raspbian图像和工具链
- Qt源码也来自上面教程中的link(
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 的应用 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
编译器本身作为交叉编译工作 - 我能够在 windows 上构建 C++ Hello World,使用 C:\SysGCC\Raspberry\bin\arm-linux-gnueabihf-g++.exe
编译然后 运行在树莓派上
我什至能够正确配置 Qt Creator,使用 arm-linux-gnueabihf-g++.exe
作为编译器,使用 C:\SysGCC\Raspberry\arm-linux-gnueabihf\sysroot\usr\local\qt5\bin\qmake.exe
作为 qmake - 基本的 opengl 项目构建良好,即使远程部署到 raspi 也能工作:) ...可惜 "Illegal instruction"
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-like wiki.qt.io wiki.qt.io 不过,我真的很期待从 Windows :)
创建一个健壮的、交叉编译的、远程部署的 Qt 环境,以便将来在我的 Raspberry 上进行开发
好吧,事实证明这很明显。这里的教程: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 的提示:)
我已经找到并阅读了question here, also threads here and here,不幸的是它仍然没有解决。 (虽然我使用了该线程中的所有提示来提供尽可能多的信息)
有什么问题
几天来,我一直在努力寻找一种能够交叉编译 Qt 的方法,因为我最近得到了一个,现在想学习如何编码一些基本的嵌入式应用程序。
我在这里学习教程: http://visualgdb.com/tutorials/raspberry/qt/embedded/
- 我使用了一个干净的系统,我唯一需要安装的是一些依赖项:
apt-get install libudev-dev libinput-dev libts-dev libxcb*
(运行第一次安装它,configure
说缺少 库) - 分别从here和
raspberry-gcc-4.9.2-r2.exe
获得Raspbian图像和工具链
- Qt源码也来自上面教程中的link(
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 的应用
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
编译器本身作为交叉编译工作 - 我能够在 windows 上构建 C++ Hello World,使用
C:\SysGCC\Raspberry\bin\arm-linux-gnueabihf-g++.exe
编译然后 运行在树莓派上我什至能够正确配置 Qt Creator,使用
arm-linux-gnueabihf-g++.exe
作为编译器,使用C:\SysGCC\Raspberry\arm-linux-gnueabihf\sysroot\usr\local\qt5\bin\qmake.exe
作为 qmake - 基本的 opengl 项目构建良好,即使远程部署到 raspi 也能工作:) ...可惜 "Illegal instruction"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-like wiki.qt.io wiki.qt.io 不过,我真的很期待从 Windows :)
创建一个健壮的、交叉编译的、远程部署的 Qt 环境,以便将来在我的 Raspberry 上进行开发好吧,事实证明这很明显。这里的教程: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 的提示:)