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

解決方法同上

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM