【问题标题】:QT5.7 Cross compile for AM1808 ARM9QT5.7 交叉编译 AM1808 ARM9
【发布时间】:2018-08-21 19:58:18
【问题描述】:

目前,我们正在开发 QT,以便为我们在 AM1808 处理器上运行的硬件开发应用程序。

目前,我们使用 QT creator 和编译器版本 Qt 4.8.7 开发我们的应用程序。

我们计划用 Qt 5.7 升级它,为此,我们从

下载相应的包

http://download.qt.io/official_releases/qt/5.7/5.7.1/single/qt-everywhere-opensource-src-5.7.1.tar.gz

我们成功下载了这个,现在需要根据我们当前的arm工具链进行配置。

我们已经按照以下修改了 qmake.conf,

#
# qmake configuration for building with arm-linux-gnueabi-g++
#

MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublib

include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)

// modifications to g++.conf

//QMAKE_CC                = arm-linux-gnueabi-gcc

//QMAKE_CXX               = arm-linux-gnueabi-g++

//QMAKE_LINK              = arm-linux-gnueabi-g++

//QMAKE_LINK_SHLIB        = arm-linux-gnueabi-g++

// modifications to linux.conf

//QMAKE_AR                = arm-linux-gnueabi-ar cqs

//QMAKE_OBJCOPY           = arm-linux-gnueabi-objcopy

//QMAKE_NM                = arm-linux-gnueabi-nm -P

//QMAKE_STRIP             = arm-linux-gnueabi-strip

QMAKE_CC                = arm-none-linux-gnueabi-gcc

QMAKE_CXX               = arm-none-linux-gnueabi-g++

QMAKE_LINK              = arm-none-linux-gnueabi-g++

QMAKE_LINK_SHLIB        = arm-none-linux-gnueabi-g++

QMAKE_AR                = arm-none-linux-gnueabi-ar cqs

QMAKE_OBJCOPY           = arm-none-linux-gnueabi-objcopy

QMAKE_STRIP             = arm-none-linux-gnueabi-strip

load(qt_config)

之后,我们运行配置命令 ./configure -opensource -confirm-license -prefix /usr/local/Qt5 -no-pch -xplatform linux-arm-gnueabi-g++

但是我们发现了以下错误,

系统架构:'arm' 主机架构:'i386' arm-none-linux-gnueabi-g++ -c -fvisibility=隐藏 fvisibility.c 符号可见性控制已启用。

cc1plus:错误:无法识别的命令行选项“-fuse-ld=gold” arm-none-linux-gnueabi-g++ -o libtest.so -shared -Wl,-Bsymbolic-functions -fPIC bsymbolic_functions.c bsymbolic_functions.c:2:2: error: #error "此架构上的符号函数绑定可能已损坏,将其禁用(请参阅 QTBUG-36129)。"

符号函数绑定已禁用。 检查 C++14...

arm-none-linux-gnueabi-g++ -c -pipe -O2 -std=gnu++1y -Wall -W -fPIC -I。 -I../../../mkspecs/linux-arm-gnueabi-g++ -o c++14.o c++14.cpp

cc1plus:错误:无法识别的命令行选项“-std=gnu++1y” make: *** [c++14.o] 错误 1

C++14 已禁用。

正在检查默认的 C++ 标准版本... arm-none-linux-gnueabi-g++ -pipe -O2 -Wall -W -fPIC -I。 -I../../../mkspecs/linux-arm-gnueabi-g++ -o c++default.ii -E c++default.cpp

已启用默认 C++ 标准版。

正在检查 64 位 std::atomic... arm-none-linux-gnueabi-g++ -c -pipe -O2 -std=gnu++11 -Wall -W -fPIC -I。 -I../../../mkspecs/linux-arm-gnueabi-g++ -o atomic64.o atomic64.cpp

cc1plus:错误:无法识别的命令行选项'-std=gnu++11'

make: *** [atomic64.o] 错误 1

64 位 std::atomic 已禁用。

检查 -latomic 中的 64 位 std::atomic... arm-none-linux-gnueabi-g++ -c -pipe -O2 -std=gnu++11 -Wall -W -fPIC -I。 -I../../../mkspecs/linux-arm-gnueabi-g++ -o atomic64.o atomic64.cpp

cc1plus:错误:无法识别的命令行选项'-std=gnu++11'

make: *** [atomic64.o] 错误 1

64 位 std::atomic in -latomic 已禁用。

检查 std::atomic 的函数指针... arm-none-linux-gnueabi-g++ -c -pipe -O2 -std=gnu++11 -Wall -W -fPIC -I。 -I../../../mkspecs/linux-arm-gnueabi-g++ -o atomicfptr.o atomicfptr.cpp cc1plus:错误:无法识别的命令行选项'-std=gnu++11'

make: *** [atomicfptr.o] 错误 1

std::atomic 禁用函数指针。

错误:检测到函数指针失败的 std::atomic 实现。

请应用与您的标准库供应商对应的补丁,该补丁位于 /opt/qt-everywhere-opensource-src-5.7.1/qtbase/config.tests/common/atomicfptr

所以,请建议我们正确的方法来编译这个 qt5 版本。

【问题讨论】:

  • 您使用的是哪个编译器(哪个版本)?
  • (gcc 版本 4.6.3 (Sourcery CodeBench Lite 2012.03-57))

标签: arm cross-compiling embedded-linux qt5.7


【解决方案1】:

您的工具链太旧了。 Qt 5.6 是最后一个不需要或多或少完全符合 C++ 11 的编译器的版本。这在 Qt 5.7 中发生了变化。

要么将你的工具链升级到 4.8(至少),要么尝试 Qt 5.6。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 2013-09-13
    • 1970-01-01
    • 2011-03-13
    • 2014-01-09
    相关资源
    最近更新 更多