gpt4 book ai didi

c++ - 尝试在 Raspberry Pi 上运行交叉编译的 Qt 时出现 "Illegal instruction"(Windows)

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:43:00 30 4
gpt4 key购买 nike

我已经找到并阅读了 question here , 还有线程 herehere ,不幸的是,它仍然没有解决。 (尽管我使用了该线程中的所有提示来提供尽可能多的信息)


有什么问题

几天来,我一直在努力寻找一种能够交叉编译 Qt 的方法,因为我最近得到了一个,现在想学习如何编写一些基本的嵌入式应用程序。

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

  • 我使用了一个干净的系统,我唯一需要安装的是一些依赖项:apt-get install libudev-dev libinput-dev libts-dev libxcb*(第一次运行它, configure 说缺少库)
  • here 获得了 Raspbian 图像和工具链,分别是2015-11-21-raspbian-jessieraspberry-gcc-4.9.2-r2.exe
  • 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 使用 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 编译 然后在树莓派上运行

  • 我什至能够正确配置 Qt Creator,使用 arm-linux-gnueabihf-g++.exe 作为编译器和 C:\SysGCC\Raspberry\arm-linux -gnueabihf\sysroot\usr\local\qt5\bin\qmake.exe as 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 上用类似 linux 的东西已经失败了wiki.qt.io 不过,我真的很期待创建一个健壮的、交叉编译的、远程部署的 Qt 环境,以便将来在我的 Raspberry 上从 Windows 进行开发:)

最佳答案

好吧,事实证明这很明显。教程在这里: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 的提示:)

附言。如果您不知道您拥有哪个版本的 RPi(我根本不确定),您可以比较规范和外围设备 herehere

关于c++ - 尝试在 Raspberry Pi 上运行交叉编译的 Qt 时出现 "Illegal instruction"(Windows),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36293039/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com