zoukankan      html  css  js  c++  java
  • OpenWrt/LEDE中使用qt库

    OpenWrt/LEDE中使用qt

    下面将从零开始介绍在openwrt中使用qt的库进行编程,本文默认读者掌握了将openwrt系统刷如对应设备的技巧,并且有一台装有linux系统的个人电脑。大致分为以下几个步骤:

    1. 编译openwrt并生成交叉工具链
    2. 在个人电脑中安装qt creator
    3. 利用上述步骤生成的交叉工具链和qt源码生成qt套件
    4. 编写测试程序并且结局动态链接库丢失的问题

       

    发现这部分内容网上没有现成的,但是其实每部分都能找到,综合了一些教程,这也就稀里糊涂随便写了写,本人文采不好,不懂的请留言,我会加以改进。

    参考了:

    https://www.cnblogs.com/kmist/p/9774292.html

    https://blog.csdn.net/SharpQian/article/details/78614936

    https://blog.csdn.net/thankfulheart/article/details/81141642

    1编译openwrt并生成交叉工具链

    刷入的openwrt系统通常可以来自网上直接下载的镜像,也可以来自自己编译的,因为在自行编译系统的过程中可以进行微调,修改相关的功能。无论读者使用那种方式的openwrt系统,在这一步,我们都需要下载源码并且进行编译操作。

    1.1源码环境

    参考

    总之就是需要下面的库,自己慢慢下载吧:

    sudo apt-get install g++

    sudo apt-get install libncurses5-dev

    sudo apt-get install zlib1g-dev

    sudo apt-get install bison

    sudo apt-get install flex

    sudo apt-get install unzip

    sudo apt-get install autoconf

    sudo apt-get install gawk

    sudo apt-get install make

    sudo apt-get install gettext

    sudo apt-get install gcc

    sudo apt-get install binutils

    sudo apt-get install patch

    sudo apt-get install bzip2

    sudo apt-get install libz-dev

    sudo apt-get install asciidoc

    sudo apt-get install subversion

    sudo apt-get install sphinxsearch

    sudo apt-get install libtool

    sudo apt-get install sphinx-common

    sudo apt-get install libssl-dev

    sudo apt-get install libssl0.9.8

    sudo apt-get install git-core

    sudo apt-get install build-essential

    sudo apt-get install mercurial

    1.2源码下载

    参考文章:https://blog.csdn.net/mojie_babyno1/article/details/81135039

    源码的下载地址其实可以自己去寻找,这里以18.01为例,分步骤执行以下内容:

    git clone git://github.com/openwrt/openwrt.git

    cd openwrt

    ./scripts/feeds update -a

    ./scripts/feeds install -a

    上述步骤的用途依次为:

    1. 下载源码
    2. 进入源码目录
    3. 更新组件的源码(openwrt设计到的或者可选的一些其他的库文件,内核模块或软件)
    4. 安装跟新下载好的组件源码

    1.3编译系统与生成交叉工具链

    这两部可以一起做,反正都是要编译一堆东西的。输入以下命令,开始配置:

    make menuconfig

    1. 修改路由器型号,这里注意:要先正确选择好"Subtarget"菜单
    2. 勾选"Package the OpenWrt-based Toolchain"菜单(这一步使得可以生成交叉工具链)
    3. [可选] Development--->Libraries--->zlib-dev(本人编译好QT后缺少这个,没办法,后来手动补了,不选也可以后面解决,这里推荐选上)
    4. [可选/不推荐] Development--->gcc(本人编译好QT后缺少了gcc库,后来手动补了,有些时候选上这个会导致无法编译,不选也可以后面解决。)
    5. 退出菜单,并且保存
    6. 开始编译,输入:make V=s

    1.4添加环境变量

    编译完成后,你的交叉工具链会出现在./staging_dir/toolchain-mips_24kc_gcc-7.3.0_musl/bin里面,先我们需要将交叉工具链添加到环境变量,这样你就可以像使用gcc一样简单的使用生成的交叉工具链了。这里以ubuntu为例进行修改,别的操作系统修改的方法可以自行搜索

    修改~/.profile文件,在最后一行添加:

    export PATH=你的交叉工具链目录:$PATH

    例如:export PATH=$HOME/openwrt_project/openwrt/staging_dir/toolchain-mips_24kc_gcc-7.3.0_musl/bin:$PATH

    完成并且保存文件后输入:source ~/.profile,或者也可以直接重启电脑。

    完成之后试一下,能不能在其他目录直接使用交叉工具链中的工具,例如我的测试了一下在其他目录中输入mips-openwrt-linux-gcc -v,结果正常。

    2 安装qt creator

    在下面地址中掉选一个你喜欢的qt版本:http://download.qt.io/archive/qt/,下面以5.14.0进行说明

    5.14.0:http://download.qt.io/archive/qt/5.14/5.14.0/

    右键qt-opensource-linux-x64-5.14.0.run。复制下载连接。

    在终端中输入:

    cd ~

    mkdir ./qt

    cd ./qt

    wget xxxxx(粘贴你刚刚复制的下载链接)

    功能分别为:

    1. 进入自己的主目录
    2. 创建qt文件夹
    3. 进入qt文件夹
    4. 下载qt-opensource-linux-x64-5.14.0.run

    下载完成后输入以下命令进行安装:

    chmod 777 ./qt-opensource-linux-x64-5.14.0.run

    ./ qt-opensource-linux-x64-5.14.0.run

     

    这里开始就自己挑选组件安装吧,记得要选上creator

    参考内容:https://blog.csdn.net/hansion3333/article/details/60468590

    3生成qt套件

    装好了creator,我们要开始编译自己的套件了。

    http://download.qt.io/archive/qt/5.14/5.14.0/single/里面下载qt-everywhere-src-5.14.0.tar.xz文件。下载方法和上面下载qt-opensource-linux-x64-5.14.0.run类似。

    下载好了之后:tar -xvf ./qt-everywhere-src-5.14.0.tar.xz

    下面分为两种情况:

    1. qt-everywhere-src-5.14/qtbase/mkspecs/ 中有你需要的现成配置,比如路由器为arm构架的,你可以在文件夹里面看到这个目录:linux-arm-gnueabi-g++/
    2. qt-everywhere-src-5.14/qtbase/mkspecs/ 中没有你需要的现成配置,下面会以mips为例说明,其实就多了一步而已

    3.1没有现成配置文件的

    其实有能力的读者这里可以参考已有的配置文件进行修改,但是有一篇帖子写得比较详细,这里引用:

    https://blog.csdn.net/thankfulheart/article/details/81141642

    最原始的代码里是没有linux-mips-g++这个目录的所以要自己添加

    在qtbase/mkspecs下创建linux-mips-g++文件夹

    然后添加文件qmake.conf和qplatformdef.h两个文件

    qmake.conf按照如下编写(mipsel-openwrt-linux-是我的交叉编译工具前缀,换成你自己的):

    # qmake configuration for building with mipsel-openwrt-linux-g++

    #

    MAKEFILE_GENERATOR = UNIX

    CONFIG += incremental gdb_dwarf_index

    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 = mipsel-openwrt-linux-gcc

    QMAKE_CXX = mipsel-openwrt-linux-g++

    QMAKE_CFLAGS += -mips32

    QMAKE_CXXFLAGS += -mips32

    QMAKE_LINK = mipsel-openwrt-linux-g++

    QMAKE_LINK_SHLIB = mipsel-openwrt-linux-g++

    # modifications to linux.conf

    QMAKE_AR = mipsel-openwrt-linux-ar cqs

    QMAKE_OBJCOPY = mipsel-openwrt-linux-objcopy

    QMAKE_STRIP = mipsel-openwrt-linux-strip

    load(qt_config)

    qplatformdef.h从qtbase/mkspecs/linux-arm-gnueabi-g++目录下拷贝即可

    下面得步骤和有现成配置文件得情况相同。

    3.2有现成配置的

    输入:

    cd qt-everywhere-src-5.14

    ./configure -release -xplatform xxxx(这里的xxxx换成自己的配置) -confirm-license -opensource -shared -no-qml-debug -no-opengl -no-audio-backend -no-openssl -no-sql-sqlite -no-libjpeg -no-libpng -no-gif -no-journald -no-mtdev -no-freetype -no-harfbuzz -no-glib -no-gtkstyle -no-gui -no-widgets -no-iconv -no-tslib -no-linuxfb -no-dbus -qt-zlib -nomake examples

    make

    make install

    上述命令功能依次为:

    1. 进入源码目录
    2. 修改编译配置,这里需要注意的是,最重要的是"./configure -release -xplatform xxxx",其他的内容,根据自己的需求修改,可以通过./configure help查看每一项是什么意思。
    3. 编译
    4. 安装,默认安装到:/usr/local/Qtxxxxx

    3.3添加套件到qt creator

    1. 打开qt creator,在 tool->option 里面选择添加自己刚刚编译好得qt
    2. 添加自己生成得交叉工具链
    3. 设置一个套件

    4测试

    建立qt的工程,自行编译这里没啥好说的,qt基本操作,推荐使用静态连接,也就是在.pro文件的CONFIG中加入static

    4.1缺库问题

    即使使用静态连接,生成的软件依然可能会缺少openwrt自己的库,这个时候需要自己补全,下面给出自己补全库的例子:

    4.2缺少libz.so.1

    进入openwrt源码目录

    make menuconfig

    Development ---> Libraries ---> zlib-dev勾选

    退出并保存

    make ./package/libs/zlib/compile v=s

    完成后:openwrt/staging_dir/target-mips_24kc_musl/root-ar71xx/usr/lib/可以找到libz.so.1,拷贝到openwrt系统中/usr/lib/

    4.3缺少libstdc++.so.6

    openwrt/staging_dir/toolchain-mips_24kc_gcc-7.3.0_musl/lib里面有,通过查看可以看到是一个指向当面目录下另一个libstdc++的软连接。相关文件都,拷贝到openwrt系统中/usr/lib/

    4.4缺少libatomic.so.1

    解决方法同上

  • 相关阅读:
    关于生产库的表空间是否自己主动扩展的看法?
    Hive创建外部表以及分区
    oninput,onpropertychange,onchange的使用方法和差别
    cacti
    java实现第五届蓝桥杯殖民地
    java实现第五届蓝桥杯殖民地
    java实现第五届蓝桥杯殖民地
    java实现第五届蓝桥杯殖民地
    java实现第五届蓝桥杯殖民地
    java实现第五届蓝桥杯LOG大侠
  • 原文地址:https://www.cnblogs.com/zornlink/p/12869962.html
Copyright © 2011-2022 走看看