add-apt-repository:找不到命令_嵌入式开发之交叉编译程序万能命令_以freetype为例...
6.4 交叉編譯程序:以freetype為例
使用buildroot來給ARM板編譯程序、編譯庫會很簡單,
以后系統講解buildroot時再使用buildroot。
現在我們還是手工交叉編譯freetype,這種方法在編譯、安裝一些小程序時很有用。
6.4.1 程序運行的一些基礎知識
系統目錄:就是交叉編譯工具鏈里的某個include目錄;
也可以自己指定:編譯時用 “ -I dir ”選項指定。
系統目錄:就是交叉編譯工具鏈里的某個lib目錄;
也可以自己指定:鏈接時用 “ -L dir ”選項指定。
系統目錄:就是板子上的/lib、/usr/lib目錄;
也可以自己指定:運行程序用環境變量LD_LIBRARY_PATH指定。
6.4.2 常見錯誤的解決方法
1.頭文件問題
編譯時找不到頭文件。在程序中這樣包含頭文件:#include <xxx.h>
對于尖括號里的頭文件,去哪里找它?
系統目錄:就是交叉編譯工具鏈里的某個include目錄;
也可以自己指定:編譯時用 “ -I dir ”選項指定。
怎么確定“系統目錄”?
執行下面命令確定目錄:
它會列出頭文件目錄、庫目錄(LIBRARY_PATH)。
你需要在頭文件目錄中確定有沒有這個文件,或是自己指定頭文件目錄。
2.庫文件問題
鏈接程序時如果有這樣的提示:undefined reference to `xxx’,它表示xxx函數未定義。
那么解決方法有2:
① 去寫出這個函數
② 或是使用庫函數,那需要在鏈接時指定庫
怎么指定庫?想鏈接libabc.so,那鏈接時加上:-labc。
庫在哪里?
① 系統目錄:就是交叉編譯工具鏈里的某個lib目錄
② 也可以自己指定:鏈接時用 “ -L dir ”選項指定
怎么確定“系統目錄”?執行下面命令確定目錄:
echo ‘main(){}’| arm-buildroot-linux-gnueabihf-gcc -E -v –
它會列出頭文件目錄、庫目錄(LIBRARY_PATH),你編譯出庫文件時,可以把它放入系統庫目錄。
3.運行問題
運行程序時找不到庫:
找不到庫,庫在哪?
① 系統目錄:就是板子上的/lib、/usr/lib目錄
② 也可以自己指定:
運行程序用環境變量LD_LIBRARY_PATH指定,執行以下的命令:
6.4.3 交叉編譯程序的萬能命令
如果交叉編輯工具鏈的前綴是arm-buildroot-linux-gnueabihf-,比如arm-buildroot-linux-gnueabihf-gcc,交叉編譯開源軟件時,如果它里面有configure,萬能命令如下:
就可以在當前目錄的tmp目錄下看見bin, lib, include等目錄,里面存有可執行程序、庫、頭文件。
1.把頭文件、庫文件放到工具鏈目錄里
如果你編譯的是一個庫,請把得到的頭文件、庫文件放入工具鏈的include、lib目錄里。別的程序要使用這些頭文件、庫時,會很方便。
工具鏈里可能有多個include、lib目錄,放到哪里去?
執行下面命令來確定目錄:
它會列出頭文件目錄、庫目錄(LIBRARY_PATH)。
2. 把庫文件放到板子上的/lib或/usr/lib目錄里
程序在板子上運行時,需要用到板子上/lib或/usr/lib下的庫文件;程序運行時不需要頭文件。
6.4.4 交叉編譯freetype
使用GIT下載所有源碼后,本節源碼位于如下目錄:
01_all_series_quickstart
04_嵌入式Linux應用開發基礎知識source10_freetype
freetype-2.10.2.tar.xz
libpng-1.6.37.tar.xz
本節文檔以STM32MP157開發板,對于其他開發板:工具鏈可能不一樣,請靈活變通。
1.確定頭文件、庫文件在工具鏈中的目錄
以STM32MP157開發板為例,它的工具鏈是arm-buildroot-linux-gnueabihf-gcc,可以執行以下命令:
可以確定頭文件的系統目錄為:
/home/book/100ask_stm32mp157_pro-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/include庫文件的系統目錄為:
/home/book/100ask_stm32mp157_pro-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/lib ```c2. 交叉編譯、安裝libpng freetype依賴于libpng,所以需要先編譯、安裝libpng。命令如下: ```c book@PC$ tar xJf libpng-1.6.37.tar.xz book@PC$ cd libpng-1.6.37 book@PC$ ./configure --host=arm-buildroot-linux-gnueabihf --prefix=$PWD/tmp book@PC$ make book@PC$ make install book@PC$ cd tmp book@PC$ cp include/* -rf /home/book/100ask_stm32mp157_pro-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/include book@PC$ cp lib/* -rfd /home/book/100ask_stm32mp157_pro-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/lib2.交叉編譯、安裝freetype
添加VX13923404017 進入技術交流群
總結
以上是生活随笔為你收集整理的add-apt-repository:找不到命令_嵌入式开发之交叉编译程序万能命令_以freetype为例...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 空间数据引擎oracle_GIS 与Or
- 下一篇: arcgis加载天地图_ArcGIS R