注意:要是用于NDK交叉编译qemu的依赖库,编译器工具API级别要在30以后,最好用33
因为只有30以后的版本支持函数memfd_create,详情请看http://t.csdn.cn/465cy
1.去如下网址下载libpng-1.6.37.tar.gz
tar -xvf libpng-1.6.37.tar.gz
cd libpng-1.6.37 && mkdir build && cd build
CC="aarch64-linux-android21-clang" ../configure --prefix=/home/dubu/installtest --host=aarch64-linux-android21 --build=x86_64 --with-sysroot=$SYSROOT --enable-shared LDFLAGS="-L${SYSROOT}/usr/lib" CPPFLAGS="-I${SYSROOT}/usr/include"
make && make install
注意:
加LDFLAGS和CPPFLAGS是为了指定zlib的位置,如果不加会报错,因为百度以下就知道zlib是为了lipng而开发的。libpng是要依赖zlib的,用NDK-r25交叉编译安装zlib的步骤可以看如下连接:
用NDK-r25交叉编译zlib-1.2.12_短发也可以在被青春吹起的博客-CSDN博客
如果是交叉编译一定要加上--host选项,configure脚本会根据--host的值和--build的值不同来判断是否是交叉编译,--build可以为空,会在执行configure的时候用uname命令补全--build的值,如果--host省略的话,就会把--build的值赋给--host。俩个值相同的话,系统就判定不是交叉编译,运行configure的时候就会报错,并且让你加上--host。
我这里--host的值最好写完整,不要单独写一个aarch64,如果只是写aarch64就不能编译出动态库文件。为什么,因为这是libpng的configure脚本设计的。它会根据你提供的--host的作一个补全,补全的格式为:CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM,即cpu类型-供应商-操作系统,具体可以查看config.sub脚本。用如下用命令可查看补全的结果
/bin/bash config.bash [--host的值或者--build的值]
--host的暂且定义为host变量,configure脚本会把host变量赋给host_alias,然后configure用上面的命令的结果赋值给build_os和host_os,configure脚本会根据build_os和host_os的值来制定编译命令。如果没有生成动态库就可去查看以下脚本怎么设置--host。