由 arm-none-linux-gnueabi 进行的 Qt 5.8 交叉编译失败?
Posted
技术标签:
【中文标题】由 arm-none-linux-gnueabi 进行的 Qt 5.8 交叉编译失败?【英文标题】:Qt 5.8 Cross Compile by arm-none-linux-gnueabi faild? 【发布时间】:2018-01-20 20:28:21 【问题描述】:在使用此命令设置路径和配置后,我从 CodeSourcery 2011 版下载了 arm-none-linux-gnueabi
须藤 ./configure \ -opengl es2 -no-xcb\ -释放-静音\ -继续 \ -开源-确认许可\ -前缀 $DEVICE_PREFIX \ -主机前缀 $HOST_PREFIX \ -sysroot $SYSTEM_ROOT \ -设备 $TARGET_DEVICE \ -设备选项 CROSS_COMPILE=$CC \ -qt-libpng\ -qt-libjpeg\ -nomake 示例\ -nomake 测试
得到这个错误:
执行配置测试 use_gold_linker + cd /home/amin/EMA/qt-everywhere-opensource-src-5.8.0/qtbase/config.tests && arm-none-linux-gnueabi-g++ -fuse-ld=gold -o conftest-out conftest.cpp cc1plus:错误:无法识别的命令行选项“-fuse-ld=gold” 测试 config.qtbase.tests.use_gold_linker 失败 执行配置测试验证规范 + cd /home/amin/EMA/qt-everywhere-opensource-src-5.8.0/qtbase/config.tests/common/verifyspec && /home/amin/EMA/qt-everywhere-opensource-src-5.8.0/ qtbase/bin/qmake -qtconf /home/amin/EMA/qt-everywhere-opensource-src-5.8.0/qtbase/bin/qt.conf "CONFIG -= qt debug_and_release app_bundle lib_bundle" "CONFIG += static console" " QMAKE_CFLAGS += --sysroot=/" "QMAKE_CXXFLAGS += --sysroot=/" "QMAKE_LFLAGS += --sysroot=/" /home/amin/EMA/qt-everywhere-opensource-src-5.8.0/qtbase/ config.tests/common/verifyspec + cd /home/amin/EMA/qt-everywhere-opensource-src-5.8.0/qtbase/config.tests/common/verifyspec && MAKEFLAGS= /usr/bin/make arm-none-linux-gnueabi-g++ -c -pipe -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mthumb -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mthumb - mfloat-abi=softfp --sysroot=/ -O2 -O3 -Wall -W -fPIC -I。 -I/home/amin/EMA/qt-everywhere-opensource-src-5.8.0/qtbase/mkspecs/devices/linux-beagleboard-g++ -o verifyspec.o verifyspec.cpp arm-none-linux-gnueabi-g++ -mfloat-abi=softfp --sysroot=/ -Wl,-O1 -o verifyspec verifyspec.o -lrt -lpthread -ldl /home/amin/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/bin/../lib/gcc/arm-none-linux-gnueabi/4.6.1/../../../../arm-none-linux-gnueabi/ bin/ld: 找不到 crt1.o: 没有这样的文件或目录 /home/amin/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/bin/../lib/gcc/arm-none-linux-gnueabi/4.6.1/../../../../arm-none-linux-gnueabi/ bin/ld: 找不到 crti.o: 没有这样的文件或目录 /home/amin/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/bin/../lib/gcc/arm-none-linux-gnueabi/4.6.1/../../../../arm-none-linux-gnueabi/ bin/ld: 找不到 -lrt /home/amin/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/bin/../lib/gcc/arm-none-linux-gnueabi/4.6.1/../../../../arm-none-linux-gnueabi/ bin/ld: 找不到 -lpthread /home/amin/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/bin/../lib/gcc/arm-none-linux-gnueabi/4.6.1/../../../../arm-none-linux-gnueabi/ bin/ld: 找不到 -ldl /home/amin/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/bin/../lib/gcc/arm-none-linux-gnueabi/4.6.1/../../../../arm-none-linux-gnueabi/ bin/ld: 找不到 -lstdc++ /home/amin/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/bin/../lib/gcc/arm-none-linux-gnueabi/4.6.1/../../../../arm-none-linux-gnueabi/ bin/ld: 找不到 -lm /home/amin/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/bin/../lib/gcc/arm-none-linux-gnueabi/4.6.1/../../../../arm-none-linux-gnueabi/ bin/ld: 找不到 -lgcc_s /home/amin/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/bin/../lib/gcc/arm-none-linux-gnueabi/4.6.1/../../../../arm-none-linux-gnueabi/ bin/ld: 找不到 -lc /home/amin/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/bin/../lib/gcc/arm-none-linux-gnueabi/4.6.1/../../../../arm-none-linux-gnueabi/ bin/ld: 找不到 -lgcc_s /home/amin/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/bin/../lib/gcc/arm-none-linux-gnueabi/4.6.1/../../../../arm-none-linux-gnueabi/ bin/ld: 找不到 crtn.o: 没有这样的文件或目录 collect2: ld 返回 1 个退出状态 Makefile:64:目标“验证规范”的配方失败 make: *** [verifyspec] 错误 1
【问题讨论】:
【参考方案1】:您的编译日志显示它正在尝试使用gold
链接器,但是找不到该命令。缺少库和目标文件的后来错误可能源于此错误。
gold 是 GNU 工具链中相对较新的成员,并且您使用的是相当旧的版本(gcc 4.6.1),所以我建议将您的工具链升级到最新版本,除非您有充分的理由不要这样做。
【讨论】:
谢谢,我尝试禁用黄金链接器,但没有成功【参考方案2】:Qt 在工具链选择方面非常固执己见。有一个 list of supported compilers 不包含基于 GCC 4.6 的内容。鉴于目前 Qt 需要 C++11 支持,因此使用古老的编译器进行此操作的机会非常有限。
Linaro 提供nice toolchains 供下载。你有什么理由不使用一个吗?或者,您可能还需要在 BBB 上安装一些额外的软件,因此您可能正在使用 Debian 之类的发行版或 Buildroot 或 Yocto 之类的构建工具来生成图像。 BeagleBone Black 是一个主流平台,基本上所有面向嵌入式平台的平台都提供支持。
TL;DR 版本:更新您的工具链或构建环境。 Qt 不是一个简单的库。
【讨论】:
以上是关于由 arm-none-linux-gnueabi 进行的 Qt 5.8 交叉编译失败?的主要内容,如果未能解决你的问题,请参考以下文章