一、编译环境准备
1.NDK下载
- 下载方式:点击下载链接,下载android-ndk-r21e-linux-x86_64.zip包即可。
- 官网下载链接:https://developer.android.google.cn/ndk/downloads
2.libiconv源码下载
- ftp官网下载:
- 下载方式:
- 通过wget工具下载,指令为:
sudo wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.17.tar.gz
- 通过wget工具下载,指令为:
- 下载方式:
二、编译流程
本次交叉编译起因是早先libxml2库在使用过程中,两个xml解析库函数xmlReadFile和xmlParseFile均无法解析GB2312格式的xml,并报错。经分析,该libxml2在编译时未引入libiconv.so动态库,该库为字符转码库,不引用该库,则libxml2仅支持UTF8格式的xml,因此本次编译的目的是交叉编译libiconv.so动态库,进而增强libxml2对于GB2312的xml解析支持。
1.本地编译64位动态库
- 编译指令:
./configure --prefix=/home/jingwei/Program/libiconv-1.17/local
sudo make
sudo make install
2.交叉编译64位动态库
- 编译指令:
./configure --prefix=/home/jingwei/Program/libiconv-1.17/localcross --host=aarch64-linux-android21 CC=/home/jingwei/Program/android-ndk-r21e-linux-x86_64/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang
sudo make clean
sudo make
sudo make install
3.交叉编译32位动态库
- 编译指令:
./configure --prefix=/home/jingwei/Program/libiconv-1.17/localcross32 --host=armv7a-linux-androideabi21 CC=/home/jingwei/Program/android-ndk-r21e-linux-x86_64/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi21-clang
sudo make clean
sudo make
sudo make install
三、编译注意事项
- 如果报错一般为忘记加sudo指令。Wget指令为网络下载软件指令,后面的网址为GNU软件的官网。
四、编译基础知识
- ./configure –help参数详解:
分为Program names,system types, Optional Features, Optional Packages。- –prefix =PREFIX:配置安装路径,要用绝对路径,make install时会把可执行文件、配置文件、库安装到指定路径的对应路径中,如bin,lib等,否则安装到默认路径/usr/local/下。
- –exec-prefic=EPREFIX:指定结构依赖的文件的位置,不指定则默认与PREFIX一致。
- –build=BUILD: 编译所在环境,默认使用当前主机进行编译,参数由config.guess猜。
- –host=HOST:指定交叉编译器,编译程序运行的机器。若不指定,使用config.guess猜。
- –target:编译新编译器用的,交叉编译和普通编译不需要。
- –with-PACKAGE:指定已有包的路径
- Pkg-config检索库的文件信息,使用pc文件,若库头文件不在/usr/local/中,则需要-I指定头文件。
- –enable-static =yes:编译为静态库
- –enable-shared=yes:编译为动态库
- –with-python=no:不构建python。
- CC:指定编译器的名字,若不配置则默认为host对应的GCC工具。
- ABI架构简介
+Aarch64:armv8架构的64位,精简指令集。
+I686: intel公司的686架构。
+Armv7a: armv7架构的32位,精简指令集。
+X86: intel公司的32位处理器,复杂指令集。
+X86_64: intel公司的64位处理器,复杂指令集。