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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

NDK 交叉编译常用变量

發布時間:2025/3/15 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NDK 交叉编译常用变量 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

總結一發NDK交叉編譯的套路

工具說明

  • addr2line 把程序地址轉換為文件名和行號。在命令行中給它一個地址和一個可執行文件名,它就會使用這個可執行文件的調試信息指出在給出的地址上是哪個文件以及行號。
  • ar 建立、修改、提取歸檔文件。歸檔文件是包含多個文件內容的一個大文件,其結構保證了可以恢復原始文件內容。
  • as 主要用來編譯GNU C編譯器gcc輸出的匯編文件,產生的目標文件由連接器ld連接。
  • c++filt 連接器使用它來過濾 C++ 和 Java 符號,防止重載函數沖突。
  • gprof 顯示程序調用段的各種數據。
  • ld 是連接器,它把一些目標和歸檔文件結合在一起,重定位數據,并連接符號引用。通常,建立一個新編譯程序的最后一步就是調用ld。
  • nm 列出目標文件中的符號。
  • objcopy 把一種目標文件中的內容復制到另一種類型的目標文件中。
  • objdump 顯示一個或者更多目標文件的信息。使用選項來控制其顯示的信息,它所顯示的信息通常只有編寫編譯工具的人才感興趣。
  • ranlib 產生歸檔文件索引,并將其保存到這個歸檔文件中。在索引中列出了歸檔文件各成員所定義的可重分配目標文件。
  • readelf 顯示elf格式可執行文件的信息。
  • size 列出目標文件每一段的大小以及總體的大小。默認情況下,對于每個目標文件或者一個歸檔文件中的每個模塊只產生一行輸出。
  • strings 打印某個文件的可打印字符串,這些字符串最少4個字符長,也可以使用選項-n設置字符串的最小長度。默認情況下,它只打印目標文件初始化和可加載段中的可打印字符;對于其它類型的文件它打印整個文件的可打印字符。這個程序對于了解非文本文件的內容很有幫助。
  • strip 丟棄目標文件中的全部或者特定符號。

make 環境變量

見?https://www.gnu.org/software/make/manual/html_node/Implicit-Variables.html

通用腳本

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960#ANDROID_HOME目錄下存在交叉編譯工具鏈toolchain目錄,由make-standalone-toolchain.sh生成# 各cpu架構的參數見下方$ANDROID_NDK/build/tools/make-standalone-toolchain.sh --arch=arm --install-dir=./toolchainexport TOOL=arm-linux-androideabiexport ANDROID_HOME=`pwd`export TOOLCHAIN=$ANDROID_HOME/toolchainexport PATH=$TOOLCHAIN/bin:$PATHexport PKG_CONFIG_LIBDIR=$TOOLCHAIN/lib/pkgconfigexport CC=$TOOLCHAIN/bin/$TOOL-gccexport CXX=$TOOLCHAIN/bin/$TOOL-g++export LINK=$CXXexport LD=$TOOLCHAIN/bin/$TOOL-ldexport AR=$TOOLCHAIN/bin/$TOOL-arexport AS=$TOOLCHAIN/bin/$TOOL-asexport NM=$TOOLCHAIN/bin/$TOOL-nmexport RANLIB=$TOOLCHAIN/bin/$TOOL-ranlibexport STRIP=$TOOLCHAIN/bin/$TOOL-stripexport OBJDUMP=$TOOLCHAIN/bin/$TOOL-objdumpexport OBJCOPE=$TOOLCHAIN/bin/$TOOL-objcopyexport ADDR2LINE=$TOOLCHAIN/bin/$TOOL-addr2lineexport ELFEDIT=$TOOLCHAIN/bin/$TOOL-elfeditexport READELF=$TOOLCHAIN/bin/$TOOL-readelfexport SIZE=$TOOLCHAIN/bin/$TOOL-sizeexport STRINGS=$TOOLCHAIN/bin/$TOOL-strings# 各cpu架構的參數見下方export ARCH_FLAGS="-mthumb"export ARCH_LINK=export CFLAGS="${ARCH_FLAGS} -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64"export CXXFLAGS="${CFLAGS} -frtti -fexceptions"export LDFLAGS="${ARCH_LINK}"export ARFLAGS=export LIBS=#CFLAGS:表示用于 C 編譯器的選項。#如指定頭文件(.h文件)的路徑,如:CFLAGS=-I/usr/include -I/path/include。同樣地,安裝一個包時會在安裝路徑下建立一個include目錄,當安裝過程中出現問題時,試著把以前安裝的包的include目錄加入到該變量中來。#CXXFLAGS:表示用于 C++ 編譯器的選項。#如執行三級優化 CXXFLAGS="-O3"#LDFLAGS:gcc 等編譯器會用到的一些鏈接參數,也可以在里面指定庫文件的位置。用法:LDFLAGS=-L/usr/lib -L/path/to/your/lib。每安裝一個包都幾乎一定的會在安裝目錄里建立一個lib目錄。如果明明安裝了某個包,而安裝另一個包時,它卻是說找不到,可以將那個包的lib路徑加入的LDFALGS中試一下。#LIBS:告訴鏈接器要鏈接哪些庫文件,如LIBS = -lpthread -liconv -llibz -llog#LDFLAGS是告訴鏈接器從哪里尋找庫文件,而LIBS是告訴鏈接器要鏈接哪些庫文件autoreconf -i./configure --prefix=$TOOLCHAIN/sysroot/usr/local \ --with-sysroot=$TOOLCHAIN/sysroot \# --host=$TOOL \# --enable-shared \ # --enable-static \# --disable-shared \# --disable-staticmake -j4make installmake uninstall

armeabi

1234$ANDROID_NDK/build/tools/make-standalone-toolchain.sh --arch=arm --install-dir=./toolchainexport TOOL=arm-linux-androideabiexport ARCH_FLAGS="-mthumb"export ARCH_LINK=

armeabi-v7a

1234$ANDROID_NDK/build/tools/make-standalone-toolchain.sh --arch=arm --install-dir=./toolchainexport TOOL=arm-linux-androideabiexport ARCH_FLAGS="-march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16"export ARCH_LINK="-march=armv7-a -Wl,--fix-cortex-a8"

arm64-v8a

1234$ANDROID_NDK/build/tools/make-standalone-toolchain.sh --arch=arm64 --install-dir=./toolchainexport TOOL=aarch64-linux-androidexport ARCH_FLAGS=export ARCH_LINK=

x86

1234$ANDROID_NDK/build/tools/make-standalone-toolchain.sh --arch=x86 --install-dir=./toolchainexport TOOL=i686-linux-androidexport ARCH_FLAGS="-march=i686 -msse3 -mstackrealign -mfpmath=sse"export ARCH_LINK=

x86_64

1234$ANDROID_NDK/build/tools/make-standalone-toolchain.sh --arch=x86_64 --install-dir=./toolchainexport TOOL="x86_64-linux-android"export ARCH_FLAGS="-march=x86-64 -msse4.2 -mpopcnt -m64 -mtune=intel"export ARCH_LINK=""

mips

1234$ANDROID_NDK/build/tools/make-standalone-toolchain.sh --arch=mips --install-dir=./toolchainexport TOOL=mipsel-linux-androidexport ARCH_FLAGS=export ARCH_LINK=

mips64

1234$ANDROID_NDK/build/tools/make-standalone-toolchain.sh --arch=mips64 --install-dir=./toolchainexport TOOL=mips64el-linux-androidexport ARCH_FLAGS=export ARCH_LINK=

總結

以上是生活随笔為你收集整理的NDK 交叉编译常用变量的全部內容,希望文章能夠幫你解決所遇到的問題。

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