生成安卓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

你可能感兴趣的:(Unity)