生成安卓64位,arm64-v8a框架下的libiconv.a靜態庫

步驟

1.下一個ndk版本,官網下就可以了,我用的是  android-ndk-r14b-linux-x86_64.zip 解壓到到linux下

https://developer.android.google.cn/ndk/downloads/revision_history

2.下一個libiconv源碼,不能用1.14(這個不能生成64位),我用的最新的1.16, 解壓到到linux下。

http://ftp.gnu.org/pub/gnu/libiconv/

3.寫一個編譯腳本,放到第2步驟解壓下的根目錄下執行。

內容如下,需要自行修改一下自己的最終輸出的libiconv路徑(腳本中的 --prefix值,最後到這個路徑下找.a就行了)和ndk路徑(腳本中的ANDROID_NDK)。

#!/bin/bash
export ANDROID_HOST=aarch64-linux-android
export ANDROID_BUILD=linux-x86_64
export ANDROID_ARCH=arm64
export ANDROID_NDK=/home/ftpuser1/android-ndk-r14b
export ANDROID_VERSION=24
export ANDROID_TOOLCHAIN_VERSION=4.9
export ANDROID_SYSROOT=$ANDROID_NDK/platforms/android-$ANDROID_VERSION/arch-$ANDROID_ARCH
export CFLAGS=--sysroot=$ANDROID_SYSROOT
export CPPFLAGS=--sysroot=$ANDROID_SYSROOT
export AR=$ANDROID_HOST-ar
export RANLIB=$ANDROID_HOST-ranlib
export PATH=$ANDROID_NDK/toolchains/$ANDROID_HOST-$ANDROID_TOOLCHAIN_VERSION/prebuilt/$ANDROID_BUILD/bin:$PATH
./configure --host=$ANDROID_HOST --with-sysroot=$ANDROID_SYSROOT --prefix=/home/ftpuser1/libiconv --enable-static --disable-shared
make
make install 
exit

問題

1.

如果使用libiconv1.14源碼用上述腳本編譯64位的話 會出現以下錯誤:

Invalid configuration `aarch64-linux-android': machine `aarch64' not recognized

2.

最後生成的.a存放目錄是根據我腳本中的配置,在/home/ftpuser1/libiconv/lib/libiconv.a

頭文件在的/home/ftpuser1/libiconv/include/libiconv.h

3.

使用 objdump -a libiconv.a (動態庫用 file XXX.so)可以查看格式,應該是elf64-little的

之前我生成了一個錯誤的格式,是elf64-86-64的,放到arm64-v8a文件下。如果使用elf64-86-64格式的.a 去參與編譯arm64-v8a的so庫的時候就會出現如下錯誤:

arm64-v8a/libiconv.a(iconv.o): Relocations in generic ELF (EM: 62)

arm64-v8a/libiconv.a: error adding symbols: File in wrong format

 

參考

https://medium.com/@zw3rk/building-iconv-for-android-e3581a52668f

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章