[QNX]QNX系統中添加自己編譯的.so庫

鋒影

email:[email protected]

如果你認爲本系列文章對你有所幫助,請大家有錢的捧個錢場,點擊此處贊助,贊助額0.1元起步,多少隨意


將自己編譯生成的動態鏈接庫文件打包到QNX系統中,主要修改的是打包所依賴的build配置文件。默認情況下,mkifs會根據build文件中所聲明的庫和腳本來生成系統bin文件;在解釋build時會根據之前主機上的環境變量搜索指定的路徑,當我們的so文件的路徑不在環境變量所定義的路徑中時,我們就需要顯示的指定我們的so庫的文件位置。

一般情況下,build的默認搜索路徑是從install/${CPU_TYPE}/lib/dll路徑下搜索的,所以如果用戶編譯生成的動態庫默認是放在這個路徑下的話,我們便不需要顯示的包含文件路徑。直接在build文件中寫明so文件名即可。但若不是在該路徑下,那就要需要寫明文件文件路徑。如下:


截圖中的screen-gles2.so以及下面的所有動態庫會默認從install/armle-v7/lib/dll和install/armle-v7/lib下查找,如果沒有對應的so庫,則從開發環境的庫中查找,默認都是QNX官方提供的庫,其功能都很基礎和有限。

[-followlink search=${QNX_TARGET}/${PROCESSOR}] /usr/lib/graphics/iMX6X=usr/lib/graphics/iMX6X表示將從qnx的SDK下的amle-v7路徑下的usr/lib/graphics/iMX6X文件夾拷貝到設備上的/usr/lib/graphics/iMX6X之中。當我們的設備起來之後,我們該路徑下就可以看到該iMX6X目錄下的文件是和SDK的文件是一樣的。

當我們要修改了部分代碼後,不使用其開發環境提供的庫時:我們就要修改build文件,修改方法如下:(以libwfdcfg-imx6x-hdmi.so爲例)
1、首先查看編譯生成libwfdcfg-imx6x-hdmi.so的代碼所依賴的makefile文件,可以知道生成該so的文件路徑。如:


該INSTALLDIR變量指明瞭編譯結果所在的目錄。上圖可知我們生成的so文件最後是放在/install/armle-v7/usr/lib/graphics/iMX6X/ 下

2、修改build文件,將上述查找到的so文件添加到build之中:
/usr/lib/graphics/iMX6X/libwfdcfg-imx6x-hdmi.so=../install/armle-v7/usr/lib/graphics/iMX6X/libwfdcfg-imx6x-hdmi.so
由於sabreARD-graphics.build是存放在image目錄下的,所以我們要先使用..來返回到根目錄後再進入到各個子目錄下。
上述等號的前面表示設備上的文件路徑,如果不指定的話,默認是放置在設備上的/proc/boot/目錄下的。
經過以上修改之後我們便可以在設備上使用我們自己的so庫了。

也有一種簡單的改法,就是修改編譯so時用到的makefile文件,將其編譯生成的so輸出到系統的搜索路徑中,這樣我們就不需要在build文件中指定so的路徑了,修改如下:

將上述makefile中的INSTALLDIR變量註釋起來,這樣生成的so的默認路徑是:/install/armv7-le/lib/dll/下。build修改如下:
/usr/lib/graphics/iMX6X/libwfdcfg-imx6x-hdmi.so=libwfdcfg-imx6x-hdmi.so


#create a symlink called ldqnx.so.2 to it(libc.so)
[type=link] /usr/lib/ldqnx.so.2=/proc/boot/libc.so
type=link 表示創建一個符號鏈接 由ldqnx.so.2-->libc.so


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章