在ubuntu20.04LTS下基于android-ndk-r21e-linux-x86_64(NDK)的clang编译器对 libiconv源码进行交叉编译--工作记录

一、编译环境准备

1.NDK下载

2.libiconv源码下载

  • ftp官网下载:
    • 下载方式:
      • 通过wget工具下载,指令为:sudo wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.17.tar.gz

二、编译流程

    本次交叉编译起因是早先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

三、编译注意事项

  1. 如果报错一般为忘记加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位处理器,复杂指令集。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值