qt4.8.6交叉编译

正常情况下,设置toolchain的环境后,配置compile.sh的编译模块,make就行:

 . /home/svn_top/env_set_hisi.sh
cd /home/work/qt-everywhere-opensource-src-4.8.6/
make confclean
vi compile.sh
cat compile.sh
./compile.sh
make
make install

但是编译会遇到一些问题:
1、之前使用hisiv400编译的,make confclean后,添加修改mkspecs/qws/linux-arm-himix200-g++/qmake.conf,将编译相关的工具都设置好,compile.sh为:

#!/bin/bash
./configure -v --prefix=/opt/Qtopia4.8.6/ -prefix-install -no-pch -xplatform qws/linux-arm-himix200-g++ -arch arm -embedded arm -qt-freetype -no-largefile -fast -release -no-qt3support -no-cups -no-opengl -no-phonon -phonon-backend -no-scripttools -no-libtiff -no-gif -no-libmng -no-nis -no-svg -qt-mouse-tslib -qt-gfx-transformed -qt-gfx-linuxfb

执行会发现还有hisiv400相关的一些信息,make confclean没有清除,使用make distclean将生成的文件完全清除即可。
2、执行compile.sh后出现tslib找不到的信息,使用toolchain重新编译tslib:

./configure --prefix=/home/work/crosscompile/tslib/tslib_install --host=arm-linux --target=arm-linux CC=arm-himix200-linux-gcc

make & make install后,在qt编译脚本compile.sh中加入tslib头文件和lib路径:

#!/bin/bash
./configure -v --prefix=/opt/Qtopia4.8.6/ -prefix-install -no-pch -xplatform qws/linux-arm-himix200-g++ -arch arm -embedded arm -qt-freetype -no-largefile -fast -release -no-qt3support -no-cups -no-opengl -no-phonon -phonon-backend -no-scripttools -no-libtiff -no-gif -no-libmng -no-nis -no-svg -qt-mouse-tslib -qt-gfx-transformed -qt-gfx-linuxfb -I/home/work/crosscompile/tslib/tslib_install/include -L/home/work/crosscompile/tslib/tslib_install/lib

再次执行,configure可以了。
3、make的时候出现 error: ‘std::tr1’ has not been declared 报错:

In file included from ../3rdparty/javascriptcore/JavaScriptCore/wtf/FastAllocBase.h:84:0,
                 from ../3rdparty/javascriptcore/JavaScriptCore/wtf/Vector.h:24,
                 from ../3rdparty/javascriptcore/JavaScriptCore/pcre/pcre_exec.cpp:50:
../3rdparty/javascriptcore/JavaScriptCore/wtf/TypeTraits.h:173:69: error: ‘std::tr1’ has not been declared
     template<typename T> struct HasTrivialConstructor : public std::tr1::has_trivial_constructor<T> { };
                                                                     ^~~
../3rdparty/javascriptcore/JavaScriptCore/wtf/TypeTraits.h:173:74: error: expected ‘{’ before ‘has_trivial_constructor’
     template<typename T> struct HasTrivialConstructor : public std::tr1::has_trivial_constructor<T> { };
                                                                          ^~~~~~~~~~~~~~~~~~~~~~~
../3rdparty/javascriptcore/JavaScriptCore/wtf/TypeTraits.h:174:68: error: ‘std::tr1’ has not been declared
     template<typename T> struct HasTrivialDestructor : public std::tr1::has_trivial_destructor<T> { };
                                                                    ^~~
../3rdparty/javascriptcore/JavaScriptCore/wtf/TypeTraits.h:174:73: error: expected ‘{’ before ‘has_trivial_destructor’
     template<typename T> struct HasTrivialDestructor : public std::tr1::has_trivial_destructor<T> { };

arm-himix200-linux-g++版本比较高,可能默认使用了c++高版本,在mkspecs/qws/linux-arm-himix200-g++/qmake.conf文件QMAKE_CXXFLAGS加入使用c++98的编译选项:

root@ubuntu:/home/work/qt-everywhere-opensource-src-4.8.6# cat mkspecs/qws/linux-arm-himix200-g++/qmake.conf
#
# qmake configuration for building with arm-himix200-linux-g++
#
include(../../common/linux.conf)
include(../../common/gcc-base-unix.conf)
include(../../common/g++-unix.conf)
include(../../common/qws.conf)
# modifications to g++.conf
QMAKE_CC = arm-himix200-linux-gcc
QMAKE_CXX = arm-himix200-linux-g++
QMAKE_LINK = arm-himix200-linux-g++
QMAKE_LINK_SHLIB = arm-himix200-linux-g++
QMAKE_CFLAGS += -march=armv7-a
QMAKE_CXXFLAGS += -std=gnu++98 -march=armv7-a
# modifications to linux.conf
QMAKE_AR = arm-himix200-linux-ar cqs
QMAKE_OBJCOPY = arm-himix200-linux-objcopy
QMAKE_STRIP = arm-himix200-linux-strip
#QMAKE_CFLAGS_RELEASE += -march=armv7
#QMAKE_CXXFLAGS_RELEASE += -march=armv7
load(qt_config)

4、再次编译,出现找不到libts.so的错误:warning: libts-1.0.so.0, needed by /myroot/qt/qtlib/lib/libQtGui.so, not found (try using -rpath or -rpath-link),与https://blog.youkuaiyun.com/weixin_36397141/article/details/54618202相同,最终的解决办法是将compile.sh的tslib路径去掉,将tslib编译出来的include和lib文件复制到toolchain的路径下:

cp /home/work/crosscompile/tslib/tslib_install/include/tslib.h /opt/hisi-linux/x86-arm/arm-himix200-linux/target/usr/include/
cp /home/work/crosscompile/tslib/tslib_install/lib/libts.so* /opt/hisi-linux/x86-arm/arm-himix200-linux/include/

compile.sh

#!/bin/bash
./configure -v --prefix=/opt/Qtopia4.8.6/ -prefix-install -no-pch -xplatform qws/linux-arm-himix200-g++ -arch arm -embedded arm -qt-freetype -no-largefile -fast -release -no-qt3support -no-cups -no-opengl -no-phonon -phonon-backend -no-scripttools -no-libtiff -no-gif -no-libmng -no-nis -no-svg -qt-mouse-tslib -qt-gfx-transformed -qt-gfx-linuxfb

重新make distclean,make,make install即可。

在 Ubuntu 20.04 LTS 上交叉编译 Qt 4.8.6 并将其部署到目标平台 Linux/imx6ull 上,您需要执行以下步骤: 1. 安装交叉编译工具链 您需要安装适用于 imx6ull 平台的交叉编译工具链。您可以从您的硬件供应商或开发板制造商处获得该工具链。安装工具链后,请确保将其添加到系统 PATH 环境变量中。 2. 下载 Qt 4.8.6 源代码 您可以从 Qt 官方网站下载 Qt 4.8.6 的源代码。请注意,这是一个相对古老的版本,因此您可能需要进行一些修改才能使其与最新版本的 Ubuntu 兼容。 3. 配置交叉编译环境 在终端中,切换到 Qt 4.8.6 源代码目录并执行以下命令: ``` ./configure -embedded arm -xplatform linux-arm-gnueabi-g++ -no-gcc-sysroot -no-cups -no-largefile -no-accessibility -no-sql-sqlite -no-qt3support -no-opengl -no-openvg -no-xsync -no-xcursor -no-xinerama -no-xinput -no-xkb -no-xrandr -no-xrender -no-xshape -no-xkbcommon -no-xxf86vm -no-sm -no-xvideo -no-xlib -no-nas-soundserver -no-glib -no-dbus -no-separate-debug-info -no-webkit -no-script -no-scripttools -nomake demos -nomake examples -prefix /usr/local/qt4.8.6-arm ``` 此命令将配置 Qt 4.8.6交叉编译环境,以生成适用于 imx6ull 平台的二进制文件。请注意,此命令中的选项可能需要根据您的具体情况进行修改。 4. 编译 Qt 4.8.6 在终端中,执行以下命令以开始编译 Qt 4.8.6: ``` make ``` 请注意,此命令可能需要一些时间才能完成。 5. 安装 Qt 4.8.6 在终端中,执行以下命令以安装 Qt 4.8.6: ``` sudo make install ``` 此命令将 Qt 4.8.6 安装到 /usr/local/qt4.8.6-arm 目录中。 6. 部署 Qt 4.8.6 到 imx6ull 平台 将 /usr/local/qt4.8.6-arm 目录复制到 imx6ull 平台的文件系统中。然后,在 imx6ull 平台上设置 QTDIR 环境变量以指向该目录。 7. 测试 Qt 4.8.6 在 imx6ull 平台上,打开终端并执行以下命令以测试 Qt 4.8.6: ``` qmake -v ``` 此命令应该输出 Qt 4.8.6 的版本信息。 现在,您已经成功地将 Qt 4.8.6 交叉编译并部署到了 imx6ull 平台。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值