zoukankan      html  css  js  c++  java
  • 【原创】基于ZYNQ7000的交叉编译工具链Qt+OpenCV+ffmpeg等库支持总结(二)

    承接上文http://www.cnblogs.com/bombe1013/p/3294301.html,我们接下来说说Qt的移植与安装。

    很喜欢Qt这个库以及Qt creater这个IDE,其实个人觉得还蛮好用,因为现在基本都是在用瞪眼儿法找错误。

    尤其喜欢Qt里面槽和信号的机制,感觉这个机制特别魔幻,特别方便,上个学年一整年的课程设计都是用Qt做的。

    言归正传,先说一下,如何在Linux下安装Qt。

    (一)Linux下Qt以及Qt creater的安装与使用

    解压qt-everywhere-opensource-src-4.8.5.tar.gz到任意文件夹内

    tar -xzvf qt-everywhere-opensource-src-4.8.5.tar.gz

    cd qt-everywhere-opensource-src-4.8.5.tar

    配置并指定编译安装目录/opt/qt-4.8.4

    ./configure -prefix /opt/qt-4.8.4

    配置过程中出现如下提示,选择o回车,继续出现提示,

    输入yes回车,接下来生成Makefile文件。

    然后,执行make以及make install。编译过程我个人花了将近四个小时,

    此时间很长。完成后添加环境变量。

    gedit /etc/bash.bashrc

    添加如下内容

    export PATH=/opt/qt-4.8.4/bin:$PATH

    export QTDIR=/opt/qt-4.8.4

    export MANPATH=$QTDIR/man:$MANPATH

    export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

    保存好后,输入source /etc/bash.bashrc使添加的环境变量生效。

    接下来安装Qt-creater。进入文件夹,输入如下命令:

    chmod 777 qt-creator-linux-x86-opensource-2.7.0.bin

    sudo ./qt-creator-linux-x86-opensource-2.6.1.bin

    接下来进入安装界面,设置安装目录以及Qt库位置,安装完成后即可使用。

    (二)交叉编译Qt库及镜像制作

    此部分内容可参考官方wikihttp://www.wiki.xilinx.com/Zynq+Qt+and+Qwt+Base+Libraries-Build+Instructions

    先建立几个环境变量,输入如下命令:

    export ZYNQ_QT_BUILD=/opt/qt-arm/build

    export ZYNQ_QT_INSTALL=/opt/qt-arm/install

    export PATH=$ZYNQ_QT_INSTALL/bin:$PATH

    在opt内建立相应目录

    cd /opt

    mkdir qt-arm

    cd qt-arm

    mkdir build install

    进入qt-everywhere-opensource-src-4.8.5.tar.gz文件夹内,解压文件到ZYNQ_QT_BUILD目录内

    tar -xzvf qt-everywhere-opensource-src-4.8.5.tar.gz -C $ZYNQ_QT_BUILD

    解压qt_build_src.tar文件,里面有我们需要的配置文件qmake.conf,该文件由Xilinx官方提供,命令如下:

    tar xvf qt_build_src.tar

    cp ./qmake.conf $ZYNQ_QT_BUILD/qt-everywhere-opensource-src-4.8.5/mkspecs/qws/linux-arm-gnueabi-g++/

    因为该配置文件基于Qt4.7,为编译Qt4.8,需要修改文件内容。

    gedit $ZYNQ_QT_BUILD/qt-everywhere-opensource-src-4.8.5/mkspecs/qws/linux-arm-gnueabi-g++/qmake.conf

    源文件内容如图所示:

    将前三行替换为

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

    修改后文件内容如图所示:

    然后对Qt进行配置

    ./configure -embedded arm -xplatform qws/linux-arm-gnueabi-g++ -little-endian -opensource -host-little-endian

    -confirm-license -nomake demos -nomake examples -prefix $ZYNQ_QT_INSTALL

    配置完成后make以及make install

    之后将Xilinx交叉编译库中的内容复制到Qt库中,输入命令:

    cp -P /root/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/arm-xilinx-linux-gnueabi/libc/usr/lib/libstdc++.so* $ZYNQ_QT_INSTALL/lib

    安装好Qt库后,需要为Zedboard制作镜像。

    cd $ZYNQ_QT_BUILD

    dd if=/dev/zero of=qt_lib.img bs=1M count=90   // qt-4.8.5需要90M大小作为镜像大小,根据需要可以改变count

    mkfs.ext2 -F qt_lib.img

    chmod go+w qt_lib.img

    mount qt_lib.img -o loop /mnt

    cp -rf $ZYNQ_QT_INSTALL/* /mnt

    chmod go-w qt_lib.img

    umount /mnt

    这个qt_lib.img就是我们所需的运行库了。

    接下来的任务就是如何挂载这个镜像。利用Qt编写一个project。导入如下环境变量:

    export ZYNQ_QT_INSTALL=/opt/Qt-arm/install

    export PATH=$ZYNQ_QT_INSTALL/bin:$PATH

    进入project内输入如下命令

    qmake -project

    qmake

    此时会生成Makefile文件,再输入make编译生成Arm Version的可执行文件。可以使用file命令查看。

    将该工程以及qt_lib.img拷贝到SD卡的FAT格式分区下。

    把SD卡插回ZYNQ开发板,通电。进入桌面后,启动终端。

    在对应的ZYNQ_QT_INSTALL目录下建立相应的目录,我自己而言

    cd /opt/

    mkdir Qt-arm

    cd Qt-arm

    mkdir install

    将qt_lib.img挂载。

    mount /dev/mmcblk0p1 /mnt(可以使用ls /dev查看SD卡分区)

    mount /mnt/qt_lib.img /opt/Qt-arm/install

    运行SD卡中的文件

    /mnt/PROJECTPATH/app -qws

    即可成功运行

  • 相关阅读:
    C#多态联系之虚方法
    FileStream 操作文件复制
    [Android] Android 用于异步加载 ContentProvider 中的内容的机制 -- Loader 机制 (LoaderManager + CursorLoader + LoaderManager.LoaderCallbacks)
    [Android] Android 异步定时任务实现的三种方法(以SeekBar的进度自动实现为例)
    [Android] Android Butterknife 8.8.1 在 Activity 和 Fragment 、 Adapter 中的使用
    [Android] Android v4包CompoundButtonCompatLollipop.class重复问题
    [Android] Android 常见第三方库汇总地址
    [Android] Android ViewPager 中加载 Fragment的两种方式 方式(二)
    [Android] Android ViewPager 中加载 Fragment的两种方式 方式(一)
    [Android] Android : lambda expressions are not supported at this language level(需设置project language level)
  • 原文地址:https://www.cnblogs.com/bombe1013/p/3294303.html
Copyright © 2011-2022 走看看