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

一、编译环境准备

1.NDK下载

2.libxml2源码下载

  • 方法一(http官网下载):

  • 方法二(ftp官网下载):

    • 下载方式:

      • 点击下载链接,下载libxml2.zip包即可。
      • 通过wget工具下载,指令为:wget http://xmlsoft.org/sources/libxml2-2.9.12.tar.gz
    • 官网下载连接:http://xmlsoft.org/sources/

二、编译流程

    本次交叉编译起因是早先libxml2库在使用过程中,两个xml解析库函数xmlReadFile和xmlParseFile均无法解析GB2312格式的xml,并报错。经分析,该libxml2在编译时未引入libiconv.so动态库,该库为字符转码库,不引用该库,则libxml2仅支持UTF8格式的xml,因此本次编译的目的是增加对libiconv.so动态库的引用。

    注意:

  • ibxml2编译有两种方式,第一种采用配置./configure方式,第二种采用配置Cmake方式,本次采用第一种方式。
  • 此时的libiconv.so必须为该交叉编译器编译过的so。

1.本地编译64位动态库

  • 编译指令:
  • ./configure --prefix=/home/jingwei/Program/libxml2git/libxml2/local --with-python=no –with-iconv=/home/jingwei/Program/libiconv-1.17/local
  • make
  • make install

2.交叉编译64位动态库

  • 编译指令:
  • ./configure CC=/home/jingwei/Program/android-ndk-r21e-linux-x86_64/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang LDFLAGS=-L/home/jingwei/Program/libiconv-1.17/localcross/lib LIBS=-liconv --prefix=/home/jingwei/Program/libxml2ftp/libxml2-2.9.11/localcross --host=aarch64-linux-android21 --with-python=no --with-iconv=/home/jingwei/Program/libiconv-1.17/localcross --with-zlib=no --with-lzma=no
  • make
  • make install

3.交叉编译32位动态库

  • 编译指令:
  • ./configure CC=/home/jingwei/Program/android-ndk-r21e-linux-x86_64/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi21-clang LDFLAGS=-L/home/jingwei/Program/libiconv-1.17/localcross32/lib LIBS=-liconv --prefix=/home/jingwei/Program/libxml2ftp/libxml2-2.9.11/localcross32 --host=armv7a-linux-androideabi21 --with-python=no --with-iconv=/home/jingwei/Program/libiconv-1.17/localcross32 --with-zlib=no --with-lzma=no
  • make
  • make install

3.交叉编译32位静态库

  • 编译指令:
  • ./configure CC=/home/jingwei/Program/android-ndk-r21e-linux-x86_64/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi21-clang LDFLAGS=-L/home/jingwei/Program/libiconv-1.17/localcross32/lib LIBS=-liconv --prefix=/home/jingwei/Program/libxml2ftp/libxml2-2.9.11/localcross32 --host=armv7a-linux-androideabi21 --with-python=no --with-iconv=/home/jingwei/Program/libiconv-1.17/localcross32 --with-zlib=no --with-lzma=no --enable-shared=no --enable-static=yes
  • make
  • make install

三、编译注意事项

  1. 若代码无configure,则先执行./autogen.sh即可,若没有autotool,libtool,python等工具,根据提示,使用apt install安装即可,如apt install autotool。
  2. Ubuntu需要设置iconv库的环境变量: export LD_LIBRARY_PATH=/home/jingwei/Program/libiconv-1.17/local/lib,最终在编译时出现checking for iconv in liconv… yes,则将incov则真正添加到libxml2中。
  3. –with-iconv 必须为iconv的源代码路径: /home/jingwei/Program/libiconv-1.17/localcross。
  4. 该libxml2源码仅能设置C的编译器,该库为c语言库,可以 设置CC编译器,目前通过./configure –help查找没有 CXX设置选项,因此若使用CXX选项设置clang++编译器,则无法进行交叉编译,应该设置CC为clang编译器。
  5. 使用ftp下载的libxml2-2.9.11编译通过,经测试git下载的libxml2-2.9.13编译显示没有libm.so,ftp下载的lixml2-2.9.1编译时问题较多,建议多下在不同版本尝试编译。

四、编译基础知识

  • ./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
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值