0、背景
在上一文《QT學(xué)習(xí)筆記-QT安裝oracle oci驅(qū)動(dòng)》中介紹了在Windows環(huán)境下使用QT訪問oracle數(shù)據(jù)庫時(shí)遇到驅(qū)動(dòng)無法加載問題的解決辦法,大體思路是對(duì)QT源碼中數(shù)據(jù)庫驅(qū)動(dòng)的源碼oci進(jìn)行編譯,要想通過編譯需要依賴對(duì)應(yīng)數(shù)據(jù)庫的頭文件和庫(可以通過下載oracle instant client),編譯通過后就可以把生成的驅(qū)動(dòng)文件放入plugin/sqldrivers的目錄下)并且把oracle instant cient目錄配置到LD_LIBRARY_PATH環(huán)境變量中,或者在程序中指定oracle instnat client的oci.dll位置就可以正常訪問postgresql數(shù)據(jù)庫了。然而要想把oracle oci驅(qū)動(dòng)移植到ARM開發(fā)板就需要更復(fù)雜的一些步驟,本文介紹具體的移植過程。
1、搭建交叉編譯環(huán)境
由于ARM開發(fā)板的內(nèi)存資源和存儲(chǔ)資源以及嵌入式操作系統(tǒng)的限制,我們不大可能在ARM開發(fā)板的系統(tǒng)上安裝QT開發(fā)環(huán)境以及源碼,ARM開發(fā)板通常作為最終的運(yùn)行環(huán)境。我們用的筆記本或個(gè)人PC往往是X86處理器,因此在筆記本系統(tǒng)或個(gè)人PC中編譯的QT程序是無法直接運(yùn)行在ARM開發(fā)板上的。從開發(fā)電腦到ARM開發(fā)板是有2個(gè)關(guān)鍵的變化,1是操作系統(tǒng)從Windows變?yōu)榱薒inux,2是從X86處理器變?yōu)榱薃RM處理器。這就需要搭建一臺(tái)交叉編譯服務(wù)器(可以是一臺(tái)獨(dú)立的PC或者是虛擬機(jī)),交叉編譯服務(wù)器的操作系統(tǒng)要為Linux,示意如下:
交叉編譯環(huán)境的搭建主要是獲得對(duì)應(yīng)的交叉編譯工具鏈,就是在X86處理器上運(yùn)行的Linux系統(tǒng)中使用交叉編譯工具鏈對(duì)X86的Windows下開發(fā)的源碼進(jìn)行交叉編譯生成基于Arm處理器的Linux系統(tǒng)能夠運(yùn)行的目標(biāo)程序。
通常我們管X86的Windows開發(fā)環(huán)境叫開發(fā)環(huán)境,X86的Linux環(huán)境叫交叉編譯環(huán)境,Arm的Linux環(huán)境叫目標(biāo)環(huán)境或運(yùn)行環(huán)境。最簡單搭建交叉編譯環(huán)境的方式就是直接使用目標(biāo)開發(fā)版操作系統(tǒng)的編譯服務(wù)器作為交叉編譯服務(wù)器。不過這個(gè)環(huán)境一般比較大,因?yàn)椴僮飨到y(tǒng)的源碼非常大。要想用一個(gè)輕量級(jí)的交叉編譯環(huán)境,還是建議自己搭建。
本文后面介紹的是直接采用的操作系統(tǒng)編譯服務(wù)器作為交叉編譯環(huán)境的。
2、交叉編譯過程
1、我們知道Qt開發(fā)的源碼,要生成可執(zhí)行程序一般要通過2個(gè)步驟:
- 通過qmake生成Makefile
- 通過make對(duì)源碼進(jìn)行編譯生成動(dòng)態(tài)庫和可執(zhí)行程序
交叉編譯的思路:首先我們要明白在開發(fā)環(huán)境中安裝qt時(shí)自帶的qmake是不能作為交叉編譯用的,因?yàn)樗傻腗akefile中所采用的gcc和g++編譯器都是對(duì)應(yīng)x86和windows的。再就是我們?nèi)绻俳徊婢幾g服務(wù)器(X86/Linux)上直接安裝Linux版本的qt的話,這個(gè)qt自帶的qmake也不能作為交叉編譯用,因?yàn)樗傻腗akefile中所采用的gcc和g++編譯器都是對(duì)應(yīng)x86和Linux的。因此我們首先要找到對(duì)應(yīng)目標(biāo)系統(tǒng)(Arm/Linux)的qmake才行。
2、我是通過buildroot構(gòu)建目標(biāo)操作系統(tǒng)的,因?yàn)橐谀繕?biāo)系統(tǒng)中運(yùn)行qt的程序,因此在構(gòu)建過程中要把qt的環(huán)境編譯到目標(biāo)系統(tǒng)中,構(gòu)建完畢后會(huì)在buildroot目錄下生成output目標(biāo),我們可以采用這下面的qmake生成采用交叉編譯器的Makefile,如下:
qmake的目錄為:SDK/buildroot/output/rockchip_rk3568/host/bin/qmake
其中SDK表示編譯目標(biāo)Linux系統(tǒng)的源碼目錄
rockchip_rk3568對(duì)應(yīng)的是芯片型號(hào)
3、我們先把qt源碼部署到交叉編譯環(huán)境中,如下:
4、下載oracle instant client
4.1 首先要下載oracleclient,因?yàn)樵诰幾goci驅(qū)動(dòng)時(shí)要依賴oracleclient中的庫和頭文件。下載地址為:
https://www.oracle.com/database/technologies/instant-client/downloads.html
如下圖:
Oracle Instant Client的下載要根據(jù)操作系統(tǒng)版本和Oracle服務(wù)器版本匹配才行。我開發(fā)環(huán)境是Windows10 64位系統(tǒng),因此選擇的是Instant Client for Microsoft Windows (x64)
4.2 點(diǎn)擊后會(huì)出現(xiàn)Oracle Instant Client版本選擇,如下圖:
不同的Oracle Instant Client版本支持的Oracle服務(wù)器的版本也不相同,我用的Oracle服務(wù)器版本是11.2,這里選擇的版本是Version 19.xx.x.x.x,我之前下載的是19.19,現(xiàn)在截圖的時(shí)候已經(jīng)是19.20,差別不大。
4.3 可以看到有BasicPackage、SQL*Plus Package、Tools Package、SDK Package、JDBC Supplement Package、ODBC Package等包的下載,如下圖:
4.5 然后把這4個(gè)壓縮包上傳到交叉編譯服務(wù)器的/opt/oracleclient_arm64/instantclient_19_19這個(gè)目錄下,如下圖:
4.6 使用unzip命令解壓這4個(gè)壓縮包(basic和sdk這2個(gè)是必須要解壓的),如下圖:
unzip instantclient-basic-linux.arm64-19.19.0.0.0dbru.zip
unzip instantclient-sdk-linux.arm64-19.19.0.0.0dbru.zip
5、通過vim修改psql.pro工程文件內(nèi)容,注釋掉QMAKE_USE += psql,如下:
一定要注意,oci在Linux下編譯依賴的庫為clntsh,不同于windows下依賴oci。
然后按ESC,輸入wq保存退出。
6、然后在oci源碼目錄下使用交叉編譯環(huán)境下的qmake生成Makefile,如下圖:
7、輸入make命令進(jìn)行編譯,如下圖:
8、編譯完畢后,會(huì)生成libqsqloci.so文件,如下圖。
目錄:QtSrc/qtbase/src/plugins/sqldrivers/plugins/sqldrivers
其中QtSrc表示Qt的源碼目錄。
我這里雖然用的是Qt5.14.2的源碼,但是我目標(biāo)系統(tǒng)是Qt5.15.2的運(yùn)行環(huán)境,不過這些數(shù)據(jù)庫驅(qū)動(dòng)的代碼都沒什么變化,因此沒什么影響。
至此終于生成了支持目標(biāo)系統(tǒng)(Arm/Linux)能夠識(shí)別的數(shù)據(jù)庫驅(qū)動(dòng)庫libqsqlpsql.so。文章來源:http://www.zghlxwxcb.cn/news/detail-646720.html
3、把數(shù)據(jù)庫驅(qū)動(dòng)部署到目標(biāo)系統(tǒng)中
1、首先通過MobaXterm以SSH方式連接到目標(biāo)系統(tǒng)(開發(fā)板系統(tǒng))。
2、在/usr/lib/qt/plugins目錄下創(chuàng)建目錄sqldrivers。
3、把在交叉編譯服務(wù)器中生成的QtSrc/qtbase/src/plugins/sqldrivers/plugins/sqldrivers/libqsqlpsql.so文件傳到目標(biāo)系統(tǒng)的/usr/lib/qt/plugins/sqldrivers目錄下,至此,目標(biāo)系統(tǒng)就支持Qt程序?qū)ostgresql數(shù)據(jù)庫的訪問了。文章來源地址http://www.zghlxwxcb.cn/news/detail-646720.html
到了這里,關(guān)于QT學(xué)習(xí)筆記-oracle oci數(shù)據(jù)庫驅(qū)動(dòng)交叉編譯并移植到ARM開發(fā)板的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!