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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

【Android NDK 开发】NDK 交叉编译 ( NDK 函数库目录 | Linux 交叉编译环境搭建 | 指定头文件目录 | 指定函数库目录 | 编译 Android 命令行可执行文件 )

發布時間:2025/6/17 linux 36 豆豆

文章目錄

        • I . NDK platforms 目錄下的 函數庫
        • II . Ubuntu 配置 NDK 交叉編譯環境
        • III . 同時指定編譯的頭文件和庫文件
        • IV . 指定編譯的頭文件
        • V . 指定編譯的庫文件
        • VI . 指定編譯的頭文件與庫文件 示例



I . NDK platforms 目錄下的 函數庫



platforms 目錄下的函數庫:


1 . Android 版本目錄 : platforms 中存儲了各個 Android 版本編譯時需要的動態庫與靜態庫資源 , 如 android-29 中就是該版本對應的本地庫資源 ;


2 . CPU 架構目錄 :

在版本目錄下存儲的是不同的 CPU 處理器對應的庫版本 , 如 arm , x86 處理器 , 32 位 與 64 位 等不同版本對應的本地庫 ;

CPU 不同 , 其對應的指令集不同 , 相應編譯出的動態庫或靜態庫就不同 ;



3 . 函數庫目錄 :


在對應 CPU 目錄下的 usr\lib 目錄下 , 存儲了該 Android 版本對應的 CPU 版本的動態庫 與 靜態庫 ;

開發高性能音頻時使用的 libOpenSLES.so , 打印日志使用的 liblog.so 庫 , 就是在該目錄下 ; 引入的 #include <android/log.h> 頭文件對應的方法邏輯實現就在 liblog.so 庫中 ;



II . Ubuntu 配置 NDK 交叉編譯環境



獨立使用 NDK 提供的交叉編譯工具 , 需要在 Ubuntu Linux 下執行 , 因此這里我們下載 Linux 版本的 NDK ;


1 . NDK 下載地址 : https://developer.android.google.cn/ndk/downloads

歷史版本的 NDK 下載地址 : https://developer.android.google.cn/ndk/downloads/older_releases.html


2 . 下載完畢會后在 Ubuntu 中解壓文件 :


3 . 配置臨時環境變量 :


① 目的 : 該臨時環境變量 就是 NDK 中的交叉編譯工具的路徑 , 目的是方便調用 ;


② 執行指令 : export CC=/home/book/NDK/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc


③ CC 環境變量作用 : CC 是變量名 , 調用的時候使用 $CC main.c 即可調用上述路徑中的 arm-linux-androideabi-gcc 工具編譯 main.c 源文件 ;


④ 交叉編譯 : 上述路徑的編譯器就是在 Linux 中編譯 ARM CPU 指令集的函數庫 , 由于是在 X86 芯片上編譯 ARM 芯片的函數庫 , 因此該操作叫做交叉編譯 ;


4 . 嘗試交叉編譯 :

① main.c 源文件 :

#include <stdio.h>int main(){printf("main : test");return 0; }

② 嘗試編譯 : 調用 $CC main.c 命令嘗試編譯 main.c 程序 , 發現如下問題 ;

book@book-virtual-machine:~/NDK$ $CC main.c main.c:1:19: fatal error: stdio.h: No such file or directory#include <stdio.h>^ compilation terminated. book@book-virtual-machine:~/NDK$

③ 分析原因 : 此處需要提供 stdio.h 對應的頭文件與函數庫 , 上面連頭文件都沒有找到 , 需要我們來指定 ;


下面開始說明如何指定頭文件與庫文件 ;



III . 同時指定編譯的頭文件和庫文件



1 . 庫文件 : 交叉編譯需要的庫文件就是上述 NDK platforms 目錄下的 函數庫 ;


2 . --sysroot 頭文件與庫文件查找目錄設定 : 使用 --sysroot=XX 參數設置 ;

指定本次編譯的 頭文件 與 庫文件 , 系統會自動到 XX/usr/include 目錄下查找頭文件 , 到 XX/usr/lib 目錄下查找庫文件 ;



IV . 指定編譯的頭文件



1 . -isysroot 頭文件查找目錄設定 : 使用 -isysroot YY 參數設置 ;

指定頭文件查找目錄 , 系統還會自動到 YY/usr/include 目錄下查找頭文件 ;

注意 : 該配置會覆蓋 --sysroot=XX 參數查找頭文件的配置 ;


2 . 同時設置 --sysroot=XX -isysroot=YY 情況 :


如果同時設置了 --sysroot=XX -isysroot=YY 兩個參數 ,

會去 XX/usr/lib 目錄下找庫文件 ,
到 YY/usr/include 目錄下查找頭文件 ;

( 此時不再去 XX/usr/include 目錄下查找頭文件 )


3 . -isystem 設置頭文件查找路徑 : 使用 -isystem ZZ 參數設置 ;

設置后系統會直接去 ZZ 目錄下查找頭文件 ;


4 . -isysroot 與 -isystem 區別 :


兩種參數配置的查找路徑不同 ,

-isysroot 設定會去設定的目錄下的 usr/include 目錄下查找 .

-isystem 會直接到設置的目錄下查找 ;


5 . -I 頭文件查找目錄 : 使用 -isystem KK 參數設置 ;

設置后系統會直接去 KK 目錄下查找頭文件 ;


6 . 頭文件目錄查找優先級 :

優先級從高到底 : -I > -isystem > -isysroot



V . 指定編譯的庫文件



1 . -L 指定庫文件查找目錄 : 使用 -L AA 參數設置 ;

設置該參數后 , 編譯時系統會自動到 AA 目錄下查找函數庫 ;


2 . -l 指定鏈接的庫名稱 : 使用 -l libxxx.so 參數設置 ;

設置該參數后 , 系統會按照該路徑加載該 libxxx.so 函數庫 ;



VI . 指定編譯的頭文件與庫文件 示例



1 . 設置臨時環境變量 :

export CC=/home/book/NDK/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc


2 . NDK 頭文件與庫文件的目錄 :
( 這里以 android-21 版本 ARM CPU 為例 )


① NDK 庫文件目錄 :

/home/book/NDK/android-ndk-r17c/platforms/android-21/arch-arm/user/lib


② NDK 庫頭文件目錄 :

/home/book/NDK/android-ndk-r17c/sysroot/usr/include

/home/book/NDK/android-ndk-r17c/sysroot/usr/include/arm-linux-androideabi/asm


3 . 最終的指定頭文件與函數庫的編譯指令 :


$CC --sysroot=/home/book/NDK/android-ndk-r17c/platforms/android-21/arch-arm -isystem /home/book/NDK/android-ndk-r17c/sysroot/usr/include -isystem /home/book/NDK/android-ndk-r17c/sysroot/usr/include/arm-linux-androideabi -pie main.c


命令解析 :


$CC : arm-linux-androideabi-gcc 交叉編譯工具的臨時環境變量 , 執行 $CC 相當于執行 /home/book/NDK/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc 命令 ;

② 指定函數庫 :

–sysroot=/home/book/NDK/android-ndk-r17c/platforms/android-21/arch-arm

指定函數庫目錄 , 必須這么寫 , 因為真正要查找的是下層目錄中的 usr/lib 目錄 ;


③ 指定頭文件 : 這里使用的是 -isystem , 不是 -isysroot , 因此目錄可以寫的隨意一些 ;


-isystem /home/book/NDK/android-ndk-r17c/sysroot/usr/include

-isystem /home/book/NDK/android-ndk-r17c/sysroot/usr/include/arm-linux-androideabi


isysroot 指定的頭文件必須在 usr/include 中 , -isystem 不必 ;


④ 指定需要在 Android 手機執行配置 : -pie


4 . 編譯結果 :


該編譯出的 a.out 可執行文件 , 可以在 Android 手機中 , 使用命令行執行 ;

手機必須 root 才可以執行 , 普通手機不能執行 ;

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的【Android NDK 开发】NDK 交叉编译 ( NDK 函数库目录 | Linux 交叉编译环境搭建 | 指定头文件目录 | 指定函数库目录 | 编译 Android 命令行可执行文件 )的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 男人的天堂avav | 亚洲 国产 欧美 日韩 | 欧美a视频 | 国产伦精品一区二区三区高清版 | 16一17女人毛片 | 国产欧美一区二区三区在线看蜜臂 | 黄色天天影视 | 在线午夜 | 国产原创91 | 在线观看麻豆av | 高清无码一区二区在线观看吞精 | 91精品视频免费在线观看 | 欧美××××黑人××性爽 | 日韩精品电影在线 | 偷偷久久 | 日本黄色一级视频 | 欧洲亚洲视频 | 成人av影院在线观看 | 久久精品天天中文字幕人妻 | 日韩色黄大片 | 伊人网亚洲 | 手机av在线网 | www.96av | 人人草人人草 | 成人福利在线视频 | 美女诱惑一区二区 | 噜噜噜噜私人影院 | 亚洲色成人www永久网站 | 无码人妻一区二区三区免费 | av剧情在线| 中文字幕一区二区三区手机版 | 男人天堂1024| 亚洲人妻电影一区 | 天天色天天射天天操 | av电影在线观看网址 | 福利社午夜影院 | 亚洲97 | 亚洲爆乳无码一区二区三区 | 久久伊人爱 | 天天曰天天 | 久久久久久色 | 国产毛毛片 | 国产亚洲无 | 丰满大肥婆肥奶大屁股 | 动漫3d精品一区二区三区乱码 | 免费成人深夜夜行网站视频 | 欧美黑人xxxⅹ高潮交 | 婷婷深爱激情 | 成长快手短视频在线观看 | 成人免费区一区二区三区 | 麻豆天天躁天天揉揉av | 亚洲自拍小视频 | 国产乱码一区二区三区 | www.日韩一区 | 亚洲国产天堂av | 亚洲爱 | 欧美高清性xxxx | 熟妇人妻无码xxx视频 | 99久久黄色 | 久久久无码精品亚洲无少妇 | 一本色道久久88综合日韩精品 | 日本婷婷 | 一区二区三区日本视频 | 精品一区二区欧美 | 三级网站在线免费观看 | 黄色在线观看视频网站 | 精品一区二区三区精华液 | 欧美极品视频在线观看 | 国产懂色av | 久久久久久九九九 | 亚洲bb| 成人免费xxxxx在线视频 | 色哟哟一区二区三区四区 | 我想看一级黄色片 | 久久九九99 | 国产精品国语自产拍在线观看 | 色婷婷综合久久久久中文一区二区 | 无码av免费毛片一区二区 | 69xx视频在线观看 | 草草影院在线观看视频 | 天堂最新资源在线 | 精品黄色片 | 中文国产字幕 | 美女网站视频在线观看 | 日韩欧美精品在线视频 | 午夜一二三| 16—17女人毛片 | 最新三级网站 | 色婷婷国产精品综合在线观看 | 亚洲免费影视 | 免费福利在线观看 | 国产久草av| 国产精品麻豆果冻传媒在线播放 | 超碰人人搞| 日韩在线中文 | 精品一级少妇久久久久久久 | 老司机午夜影院 | 精品久久99| a天堂中文在线观看 |