日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

add-apt-repository:找不到命令_嵌入式开发之交叉编译程序万能命令_以freetype为例...

發布時間:2024/4/13 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 ”選項指定。

    怎么確定“系統目錄”?
    執行下面命令確定目錄:

    echo 'main(){}'| arm-buildroot-linux-gnueabihf-gcc -E -v -

    它會列出頭文件目錄、庫目錄(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.運行問題
    運行程序時找不到庫:

    error while loading shared libraries: libxxx.so: cannot open shared object file: No such file or directory

    找不到庫,庫在哪?
    ① 系統目錄:就是板子上的/lib、/usr/lib目錄
    ② 也可以自己指定:
    運行程序用環境變量LD_LIBRARY_PATH指定,執行以下的命令:

    export LD_LIBRARY_PATH=/xxx_dir ; ./test 或 LD_LIBRARY_PATH=/xxx_dir ./test

    6.4.3 交叉編譯程序的萬能命令
    如果交叉編輯工具鏈的前綴是arm-buildroot-linux-gnueabihf-,比如arm-buildroot-linux-gnueabihf-gcc,交叉編譯開源軟件時,如果它里面有configure,萬能命令如下:

    ./configure --host=arm-buildroot-linux-gnueabihf --prefix=$PWD/tmp make make install

    就可以在當前目錄的tmp目錄下看見bin, lib, include等目錄,里面存有可執行程序、庫、頭文件。

    1.把頭文件、庫文件放到工具鏈目錄里
    如果你編譯的是一個庫,請把得到的頭文件、庫文件放入工具鏈的include、lib目錄里。別的程序要使用這些頭文件、庫時,會很方便。
    工具鏈里可能有多個include、lib目錄,放到哪里去?
    執行下面命令來確定目錄:

    echo 'main(){}'| arm-buildroot-linux-gnueabihf-gcc -E -v –

    它會列出頭文件目錄、庫目錄(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,可以執行以下命令:

    echo 'main(){}'| arm-buildroot-linux-gnueabihf-gcc -E -v -

    可以確定頭文件的系統目錄為:

    /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/lib

    2.交叉編譯、安裝freetype

    添加VX13923404017 進入技術交流群

    總結

    以上是生活随笔為你收集整理的add-apt-repository:找不到命令_嵌入式开发之交叉编译程序万能命令_以freetype为例...的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。