NDK編譯常用命令及不同版本so編譯方法


工具說明

  • 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

通用腳本

 1 #ANDROID_HOME目錄下存在交叉編譯工具鏈toolchain目錄,由make-standalone-toolchain.sh生成
 2 # 各cpu架構的參數見下方
 3 $ANDROID_NDK/build/tools/make-standalone-toolchain.sh --arch=arm --install-dir=./toolchain
 4 export TOOL=arm-linux-androideabi
 5 export ANDROID_HOME=`pwd`
 6 export TOOLCHAIN=$ANDROID_HOME/toolchain
 7 export PATH=$TOOLCHAIN/bin:$PATH
 8 export PKG_CONFIG_LIBDIR=$TOOLCHAIN/lib/pkgconfig
 9 export CC=$TOOLCHAIN/bin/$TOOL-gcc
10 export CXX=$TOOLCHAIN/bin/$TOOL-g++
11 export LINK=$CXX
12 export LD=$TOOLCHAIN/bin/$TOOL-ld
13 export AR=$TOOLCHAIN/bin/$TOOL-ar
14 export AS=$TOOLCHAIN/bin/$TOOL-as
15 export NM=$TOOLCHAIN/bin/$TOOL-nm
16 export RANLIB=$TOOLCHAIN/bin/$TOOL-ranlib
17 export STRIP=$TOOLCHAIN/bin/$TOOL-strip
18 export OBJDUMP=$TOOLCHAIN/bin/$TOOL-objdump
19 export OBJCOPE=$TOOLCHAIN/bin/$TOOL-objcopy
20 export ADDR2LINE=$TOOLCHAIN/bin/$TOOL-addr2line
21 export ELFEDIT=$TOOLCHAIN/bin/$TOOL-elfedit
22 export READELF=$TOOLCHAIN/bin/$TOOL-readelf
23 export SIZE=$TOOLCHAIN/bin/$TOOL-size
24 export STRINGS=$TOOLCHAIN/bin/$TOOL-strings
25 # 各cpu架構的參數見下方
26 export ARCH_FLAGS="-mthumb"
27 export ARCH_LINK=
28 export CFLAGS="${ARCH_FLAGS} -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64"
29 export CXXFLAGS="${CFLAGS} -frtti -fexceptions"
30 export LDFLAGS="${ARCH_LINK}"
31 export ARFLAGS=
32 export LIBS=
33 #CFLAGS:表示用於 C 編譯器的選項。
34 #如指定頭文件(.h文件)的路徑,如:CFLAGS=-I/usr/include -I/path/include。同樣地,安裝一個包時會在安裝路徑下建立一個include目錄,當安裝過程中出現問題時,試着把以前安裝的包的include目錄加入到該變量中來。
35 #CXXFLAGS:表示用於 C++ 編譯器的選項。
36 #如執行三級優化 CXXFLAGS="-O3"
37 #LDFLAGS:gcc 等編譯器會用到的一些鏈接參數,也可以在里面指定庫文件的位置。用法:LDFLAGS=-L/usr/lib -L/path/to/your/lib。每安裝一個包都幾乎一定的會在安裝目錄里建立一個lib目錄。如果明明安裝了某個包,而安裝另一個包時,它卻是說找不到,可以將那個包的lib路徑加入的LDFALGS中試一下。
38 #LIBS:告訴鏈接器要鏈接哪些庫文件,如LIBS = -lpthread -liconv -llibz -llog
39 #LDFLAGS是告訴鏈接器從哪里尋找庫文件,而LIBS是告訴鏈接器要鏈接哪些庫文件
40 autoreconf -i
41 ./configure --prefix=$TOOLCHAIN/sysroot/usr/local \
42             --with-sysroot=$TOOLCHAIN/sysroot \
43 #            --host=$TOOL \
44 #            --enable-shared \ 
45 #            --enable-static \
46 #            --disable-shared \
47 #            --disable-static
48 make -j4
49 make install
50 make uninstall

armeabi

1 $ANDROID_NDK/build/tools/make-standalone-toolchain.sh --arch=arm --install-dir=./toolchain
2 export TOOL=arm-linux-androideabi
3 export ARCH_FLAGS="-mthumb"
4 export ARCH_LINK=

armeabi-v7a

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

arm64-v8a

1 $ANDROID_NDK/build/tools/make-standalone-toolchain.sh --arch=arm64 --install-dir=./toolchain
2 export TOOL=aarch64-linux-android
3 export ARCH_FLAGS=
4 export ARCH_LINK=

x86

1 $ANDROID_NDK/build/tools/make-standalone-toolchain.sh --arch=x86 --install-dir=./toolchain
2 export TOOL=i686-linux-android
3 export ARCH_FLAGS="-march=i686 -msse3 -mstackrealign -mfpmath=sse"
4 export ARCH_LINK=

x86_64

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

mips

1 $ANDROID_NDK/build/tools/make-standalone-toolchain.sh --arch=mips --install-dir=./toolchain
2 export TOOL=mipsel-linux-android
3 export ARCH_FLAGS=
4 export ARCH_LINK=

mips64

1 $ANDROID_NDK/build/tools/make-standalone-toolchain.sh --arch=mips64 --install-dir=./toolchain
2 export TOOL=mips64el-linux-android
3 export ARCH_FLAGS=
4 export ARCH_LINK=

使用方法:

首先使用腳本編譯出工具鏈,而后在運行工具之前先export進行配置,再運行工具鏈直接編譯即可


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM