QT5.7 AM1808 ARM9的交叉编译

时间:2018-03-13 14:05:03

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

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

目前,我们使用QT创建者开发了我们的应用程序,编译器版本为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)

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

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

系统架构:'手臂' 主机架构:'i386' arm-none-linux-gnueabi-g ++ -c -fvisibility = hidden 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“此架构上的符号函数绑定可能会被破坏,从而禁用它(请参阅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 disabled。

为函数指针检查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版本的正确方法。

1 个答案:

答案 0 :(得分:0)

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

将工具链升级到4.8(至少)或尝试Qt 5.6。