我找到并阅读了question here,还有线程here和here,遗憾的是它仍然没有得到解决。 (虽然我使用了该主题中的所有提示尽可能多地提供信息)
有几天我一直试图找到一种能够交叉编译 Qt 的方法,因为我最近有一个,现在想学习如何编写一些基本的嵌入式代码应用。
我按照此处的教程进行操作: http://visualgdb.com/tutorials/raspberry/qt/embedded/
apt-get install libudev-dev libinput-dev libts-dev libxcb*
(第一次运行它,configure
说错过了
LIBS)2015-11-21-raspbian-jessie
和raspberry-gcc-4.9.2-r2.exe
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环境:)
答案 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 提示:)