android 编译 libjpeg-turbo,编译Android环境的libjpeg-turbo

1、libjpeg 和 libjpeg-turbo

为了在Android环境实现无损压缩或者我们为了实现更高性能的jpeg图像压缩,我们需要使用到libjpeg-turbo1。

官网上已说, libjpeg-turbo is generally 2-6x as fast as libjpeg。所以,一般我们选用libjpeg-turbo而不是libjpeg,因为前者快后者2-6倍

2、编译过程

2.1 下载源码

我们需要先下载libjpeg-turbo2的源码

下载了源码之后,找到源码里的BUILDING.md文件,我们将依照官方说明来进行编译安装

2.2 系统环境

编译之前我们需要准备配置好编译环境(Linux):

Windows——需要Linux环境,可以使用cygwin

Linux——Ubuntu或者其它的Linux系统

这里我使用了在Windows上通过虚拟机安装的Ubuntu来编译

0497321502b59649fcb9b758955dcb83.png

注意 1

切记,在Windows上使用

cygwin,不能使用Windows环境的

NDK,否则会编译失败。我们需要在Linux环境下编译,所以一定要使用Linux环境下的NDK。

2.3 编译环境

我这里选用的Ubuntu来编译,所以以下的编译过程都是在Ubuntu下操作

2.3.1 NDK

下载Linux环境的NDK3

426f891b7b567a107f2fb8e5a0aabd82.png

2.3.2 安装需要的工具

编译libjpeg-tubro需要一系列工具,需要首先安装配置好.比如:autoconf、automake、libtool、m4、nasm

安装有依赖关系,最好按照以上的顺序安装,autoconf依赖m4

如果需要编译x86的库,需要安装nasm

下载完成后,安装(Linux系统安装大致都是如此):

tar -xzvf *.gz //解压

cd dir //切换到解压目录

./configure

make

sudo make install //有需要的输入系统登录账户密码

检验是否安装成功,比如,aoutomake,终端定位到安装目录,执行

make --version

查看安装版本

我们安装的工具如下:

1b4e47fa674b7c93b522c62e9eea9b9d.png

2.3.3 配置系统环境变量

把以上的安装都配置到系统环境变量里,方便我们在终端使用

在终端输入:

sudo gedit /etc/environment

在PATH='……'后面加入”:我们安装的路径“,注意路径前面有冒号 :

1b9db97f47bed1a9b84d9864d0c35632.png

编辑完后,点击save保存并关闭,然后执行

source /etc/environment

使之立即生效

2.4 编译

下载并解压源码4

2.4.1 生成配置脚本

在终端依次输入下列command

cd {source_directory}

autoreconf -fiv

cd {build_directory}

2.4.2 编写编译脚本

make install编译安装成功之后可以通过make distclean清除编译结果

2.4.2.1 armeabi-v7a.sh

cd libjpeg

NDK_PATH=/home/as/Android/android-ndk-r15c

BUILD_PLATFORM=linux-x86_64

TOOLCHAIN_VERSION=4.9

ANDROID_VERSION=21

HOST=arm-linux-androideabi

SYSROOT=${NDK_PATH}/platforms/android-${ANDROID_VERSION}/arch-arm

ANDROID_CFLAGS="-march=armv7-a -mfloat-abi=softfp -fprefetch-loop-arrays -mfpu=neon -mthumb -D__ANDROID__ -D__ARM_ARCH_7__ \

--sysroot=${SYSROOT}"

TOOLCHAIN=${NDK_PATH}/toolchains/${HOST}-${TOOLCHAIN_VERSION}/prebuilt/${BUILD_PLATFORM}

export CPP=${TOOLCHAIN}/bin/${HOST}-cpp

export AR=${TOOLCHAIN}/bin/${HOST}-ar

export NM=${TOOLCHAIN}/bin/${HOST}-nm

export CC=${TOOLCHAIN}/bin/${HOST}-gcc

export LD=${TOOLCHAIN}/bin/${HOST}-ld

export RANLIB=${TOOLCHAIN}/bin/${HOST}-ranlib

export OBJDUMP=${TOOLCHAIN}/bin/${HOST}-objdump

export STRIP=${TOOLCHAIN}/bin/${HOST}-strip

sh ../libjpeg-turbo-master/configure --host=${HOST} \

CFLAGS="${ANDROID_CFLAGS} -O3 -fPIE" \

CPPFLAGS="${ANDROID_CFLAGS}" \

LDFLAGS="${ANDROID_CFLAGS} -pie" --with-simd ${1+"$@"} --with-jpeg8 \

--prefix=/home/as/Documents/dist/libjpeg-turbo/armeabi-v7a/

make

sudo make install

# --exec-prefix=/home/as/Documents/dist/ex/ --enable-shared --enable-static

2.4.2.2 arm64-v8a.sh

cd libjpeg

NDK_PATH=/home/as/Android/android-ndk-r15c

BUILD_PLATFORM=linux-x86_64

TOOLCHAIN_VERSION=4.9

ANDROID_VERSION=21

HOST=aarch64-linux-android

SYSROOT=${NDK_PATH}/platforms/android-${ANDROID_VERSION}/arch-arm64

ANDROID_CFLAGS="--sysroot=${SYSROOT}"

TOOLCHAIN=${NDK_PATH}/toolchains/${HOST}-${TOOLCHAIN_VERSION}/prebuilt/${BUILD_PLATFORM}

export CPP=${TOOLCHAIN}/bin/${HOST}-cpp

export AR=${TOOLCHAIN}/bin/${HOST}-ar

export NM=${TOOLCHAIN}/bin/${HOST}-nm

export CC=${TOOLCHAIN}/bin/${HOST}-gcc

export LD=${TOOLCHAIN}/bin/${HOST}-ld

export RANLIB=${TOOLCHAIN}/bin/${HOST}-ranlib

export OBJDUMP=${TOOLCHAIN}/bin/${HOST}-objdump

export STRIP=${TOOLCHAIN}/bin/${HOST}-strip

sh ../libjpeg-turbo-master/configure --host=${HOST} \

CFLAGS="${ANDROID_CFLAGS} -O3 -fPIE" \

CPPFLAGS="${ANDROID_CFLAGS}" \

LDFLAGS="${ANDROID_CFLAGS} -pie" --with-simd ${1+"$@"} --with-jpeg8 \

--prefix=/home/as/Documents/dist/libjpeg-turbo/

make

sudo make install

# --exec-prefix=/home/as/Documents/dist/ex/ --enable-shared --enable-static

2.4.2.3 x86.sh

cd libjpeg

NDK_PATH=/home/as/Android/android-ndk-r15c

BUILD_PLATFORM=linux-x86_64

TOOLCHAIN_VERSION=4.9

ANDROID_VERSION=21

HOST=i686-linux-android

SYSROOT=${NDK_PATH}/platforms/android-${ANDROID_VERSION}/arch-x86

ANDROID_CFLAGS="--sysroot=${SYSROOT}"

TOOLCHAIN=${NDK_PATH}/toolchains/x86-${TOOLCHAIN_VERSION}/prebuilt/${BUILD_PLATFORM}

export CPP=${TOOLCHAIN}/bin/${HOST}-cpp

export AR=${TOOLCHAIN}/bin/${HOST}-ar

export NM=${TOOLCHAIN}/bin/${HOST}-nm

export CC=${TOOLCHAIN}/bin/${HOST}-gcc

export LD=${TOOLCHAIN}/bin/${HOST}-ld

export RANLIB=${TOOLCHAIN}/bin/${HOST}-ranlib

export OBJDUMP=${TOOLCHAIN}/bin/${HOST}-objdump

export STRIP=${TOOLCHAIN}/bin/${HOST}-strip

sh ../libjpeg-turbo-master/configure --host=${HOST} \

CFLAGS="${ANDROID_CFLAGS} -O3 -fPIE" \

CPPFLAGS="${ANDROID_CFLAGS}" \

LDFLAGS="${ANDROID_CFLAGS} -pie" --with-simd ${1+"$@"} --with-jpeg8 \

--prefix=/home/as/Documents/dist/libjpeg-turbo/x86/

make

sudo make install

# --exec-prefix=/home/as/Documents/dist/ex/ --enable-shared --enable-static

2.4.2.4 x86_64.sh

cd libjpeg

NDK_PATH=/home/as/Android/android-ndk-r15c

BUILD_PLATFORM=linux-x86_64

TOOLCHAIN_VERSION=4.9

ANDROID_VERSION=21

HOST=x86_64-linux-android

SYSROOT=${NDK_PATH}/platforms/android-${ANDROID_VERSION}/arch-x86_64

ANDROID_CFLAGS="--sysroot=${SYSROOT}"

TOOLCHAIN=${NDK_PATH}/toolchains/x86_64-${TOOLCHAIN_VERSION}/prebuilt/${BUILD_PLATFORM}

export CPP=${TOOLCHAIN}/bin/${HOST}-cpp

export AR=${TOOLCHAIN}/bin/${HOST}-ar

export NM=${TOOLCHAIN}/bin/${HOST}-nm

export CC=${TOOLCHAIN}/bin/${HOST}-gcc

export LD=${TOOLCHAIN}/bin/${HOST}-ld

export RANLIB=${TOOLCHAIN}/bin/${HOST}-ranlib

export OBJDUMP=${TOOLCHAIN}/bin/${HOST}-objdump

export STRIP=${TOOLCHAIN}/bin/${HOST}-strip

sh ../libjpeg-turbo-master/configure --host=${HOST} \

CFLAGS="${ANDROID_CFLAGS} -O3 -fPIE" \

CPPFLAGS="${ANDROID_CFLAGS}" \

LDFLAGS="${ANDROID_CFLAGS} -pie" --with-simd ${1+"$@"} --with-jpeg8 \

--prefix=/home/as/Documents/dist/libjpeg-turbo/x86-64/

make

sudo make install

#--exec-prefix=/home/as/Documents/dist/ex/ --enable-shared --enable-static

2.4.3 编译

以上脚本需要根据你的源码目录,NDK目录,修改相应的路径,--prefix指定编译的安装目录,就是最终的库存放位置

在终端里执行以上脚本

sh ./armeabi-v7a.sh

编译结果可以通过make distclean清除

a5cbba62253905b70d38d9e48ea15239.png

d15acf3d340fe6a0ec8e9cd8c6891beb.png

3、使用

至于使用网上已经有很多介绍,这里不再赘述,Android平台通过JNI或者在native层直接使用就可以了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值