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

解决方法同上

原文地址:https://www.cnblogs.com/zornlink/p/12869962.html