【发布时间】:2016-07-17 12:35:07
【问题描述】:
我找到并阅读了question here,还有线程here 和here,不幸的是它仍然没有解决。 (尽管我使用了该线程中的所有提示来提供尽可能多的信息)
有什么问题
几天来,我一直在尝试找到一种能够交叉编译 Qt 的方法,因为我最近得到了一个,现在想学习如何编写一些基本的嵌入式应用程序。
我正在学习这里的教程: http://visualgdb.com/tutorials/raspberry/qt/embedded/
- 我使用了一个干净的系统,我唯一需要安装的是一些依赖项:
apt-get install libudev-dev libinput-dev libts-dev libxcb*(第一次运行它,configure说缺少 库) - 分别从here,
2015-11-21-raspbian-jessie和raspberry-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/Linuxroot@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 的东西失败了 不过,我真的很期待做出一个健壮的交叉编译,远程部署 Qt 环境,以便将来在 Windows 上在我的 Raspberry 上开发 :)
【问题讨论】:
-
嘿,如果您找到解决方案,请随时联系我们,我在这里使用本教程从 Linux 交叉编译:wiki.qt.io/RaspberryPi2EGLFS
-
您可以尝试在您的 raspi 上运行 raspi-config,然后“高级选项”->“GL 驱动程序”。我无法启用 GL 驱动程序,因为设备不支持它,这导致我检查板上印制的版本号。 RasPi 1 B+ v1.2 在这里不起作用。插入我的另一个 raspi (2 B v1.1) 工作正常。好吧,当我运行“qopenglwidget”示例时,什么都没有发生,但是“非法指令”已经消失了。因此,这项工作可能是错误的 RasPi。
标签: c++ qt raspberry-pi cross-compiling toolchain