rv1126 rv1109平台下Qt应用程序交叉编译

rv1126 rv1109平台下Qt应用程序交叉编译

准备工作

  1. 编译好对应的SDK,进入buildroot 目录下,执行make sdk,把对应编译所需的文件(编译器,编译应用程序所依赖的库,qt库)打包。
    路径如下

buildroot/output/rockchip_rv1126_rv1109_facial_gate/host

rockchip_rv1126_rv1109_facial_gate为选择的sdk选项名

  1. 把buildroot/output/rockchip_rv1126_rv1109_facial_gate/host 中的host文件copy到其它位置,好设置环境变量,环境变量设置如下

export PATH=xxx刚刚copy到的位置/host/usr/bin:$PATH

设置好后验证一下

which qmake
显示 xxx刚刚copy到的位置/host/usr/bin/qmake

如果是显示的/usr/bin 下或者pc下安装qt目录的qmake则表示PATH设置不成功。

备注: usr/bin 与bin下的内容是一样的

编译

执行qmake demo.pro ;demo.pro为对应的工程名字
make
编译成功
验证是否交叉编译成功;

file demo

demo: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 3.2.0, with debug_info, not stripped

在我的本机上设置PATH 环境变量变可以编译成功,其它的机器可能会有这样那样的问题,下面的常见问题的解决方案。

常见问题

1.用过NXP yacto 生成的编译环境的,可能会很奇怪,没有设置–sysroot 交叉编译也能成功?
原因:在make sdk生成的qt打包项中 有一个qt.conf文件,该文件的内容如下

[Paths]
Prefix=/usr
HostPrefix=/home/xxx/work/rv1109_rq/rv1126_1109_20220429/buildroot/output/rockchip_rv1126_rv1109_facial_gate/host
Sysroot=/home/xxx/work/rv1109_rq/rv1126_1109_20220429/buildroot/output/rockchip_rv1126_rv1109_facial_gate/host/arm-buildroot-linux-gnueabihf/sysroot
Headers=/usr/include/qt5
Plugins=/usr/lib/qt/plugins
Examples=/usr/lib/qt/examples

有指定sysroot
NXP 的 environment-setup-cortexa9hf-vfp-neon-poky-linux-gnueabi 文件 如下

export SDKTARGETSYSROOT=/opt/fsl-imx-x11/3.14.52-1.1.0/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi
export PATH=/opt/fsl-imx-x11/3.14.52-1.1.0/sysroots/x86_64-pokysdk-linux/usr/bin:/opt/fsl-imx-x11/3.14.52-1.1.0/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi:$PATH
export CCACHE_PATH=/opt/fsl-imx-x11/3.14.52-1.1.0/sysroots/x86_64-pokysdk-linux/usr/bin:/opt/fsl-imx-x11/3.14.52-1.1.0/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi:$CCACHE_PATH
export PKG_CONFIG_SYSROOT_DIR=$SDKTARGETSYSROOT
export PKG_CONFIG_PATH=$SDKTARGETSYSROOT/usr/lib/pkgconfig
export CONFIG_SITE=/opt/fsl-imx-x11/3.14.52-1.1.0/site-config-cortexa9hf-vfp-neon-poky-linux-gnueabi
export OECORE_NATIVE_SYSROOT="/opt/fsl-imx-x11/3.14.52-1.1.0/sysroots/x86_64-pokysdk-linux"
export OECORE_TARGET_SYSROOT="$SDKTARGETSYSROOT"
export OECORE_ACLOCAL_OPTS="-I /opt/fsl-imx-x11/3.14.52-1.1.0/sysroots/x86_64-pokysdk-linux/usr/share/aclocal"
export PYTHONHOME=/opt/fsl-imx-x11/3.14.52-1.1.0/sysroots/x86_64-pokysdk-linux/usr
export CC="arm-poky-linux-gnueabi-gcc  -march=armv7-a -mfloat-abi=hard -mfpu=neon -mtune=cortex-a9 --sysroot=$SDKTARGETSYSROOT"
export CXX="arm-poky-linux-gnueabi-g++  -march=armv7-a -mfloat-abi=hard -mfpu=neon -mtune=cortex-a9 --sysroot=$SDKTARGETSYSROOT"
export CPP="arm-poky-linux-gnueabi-gcc -E  -march=armv7-a -mfloat-abi=hard -mfpu=neon -mtune=cortex-a9 --sysroot=$SDKTARGETSYSROOT"
export AS="arm-poky-linux-gnueabi-as "
export LD="arm-poky-linux-gnueabi-ld  --sysroot=$SDKTARGETSYSROOT"
export GDB=arm-poky-linux-gnueabi-gdb
export STRIP=arm-poky-linux-gnueabi-strip
export RANLIB=arm-poky-linux-gnueabi-ranlib
export OBJCOPY=arm-poky-linux-gnueabi-objcopy
export OBJDUMP=arm-poky-linux-gnueabi-objdump
export AR=arm-poky-linux-gnueabi-ar
export NM=arm-poky-linux-gnueabi-nm
export M4=m4
export TARGET_PREFIX=arm-poky-linux-gnueabi-
export CONFIGURE_FLAGS="--target=arm-poky-linux-gnueabi --host=arm-poky-linux-gnueabi --build=x86_64-linux --with-libtool-sysroot=$SDKTARGETSYSROOT"
export CFLAGS=" -O2 -pipe -g -feliminate-unused-debug-types"
export CXXFLAGS=" -O2 -pipe -g -feliminate-unused-debug-types"
export LDFLAGS="-Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed"
export CPPFLAGS=""
export KCFLAGS="--sysroot=$SDKTARGETSYSROOT"
export OECORE_DISTRO_VERSION="3.14.52-1.1.0"
export OECORE_SDK_VERSION="3.14.52-1.1.0"
export ARCH=arm
export CROSS_COMPILE=arm-poky-linux-gnueabi-

# Append environment subscripts
if [ -d "$OECORE_TARGET_SYSROOT/environment-setup.d" ]; then
    for envfile in $OECORE_TARGET_SYSROOT/environment-setup.d/*.sh; do
	    source $envfile
    done
fi
if [ -d "$OECORE_NATIVE_SYSROOT/environment-setup.d" ]; then
    for envfile in $OECORE_NATIVE_SYSROOT/environment-setup.d/*.sh; do
	    source $envfile
    done
fi

2.提示spec的问题,如spec 指定到了 linux-g++ (具体的报错信息没有记录了)
可以手动指定
qmake -spec linux-arm-gnueabi-g++ demo.pro

3.提示arm-linux-gcc 编译器指不到
如果是手动交叉编译过qt源码的都知识是qmake.conf配置的问题,修改修改host/mkspec/linux-arm-gnueabi-g++/qmake.conf

注意这里的linux-arm-gnueabi-g++ 取决于第二步的-spec

#
# 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
load(qt_config)

总结

如果环境配置的比较好,直接qmake,make 就可以交叉编译,如果环境没配置好,可以按常见问题去解决。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值