您的位置:首页 > 移动开发 > Android开发

编译Android环境的libjpeg-turbo

2017-10-25 13:48 281 查看

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来编译



注意 1
切记,在Windows上使用
cygwin
,不能使用Windows环境的NDK,否则会编译失败。我们需要在Linux环境下编译,所以一定要使用Linux环境下的NDK。

2.3 编译环境

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

2.3.1 NDK

下载Linux环境的NDK3



2.3.2 安装需要的工具

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

下载地址:

1. m4

2. autoconf

3. automake

4. libtool

5. nasm

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


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


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

tar -xzvf   *.gz      //解压
cd dir                //切换到解压目录

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


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

make --version


查看安装版本

我们安装的工具如下:



2.3.3 配置系统环境变量

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

在终端输入:

sudo gedit /etc/environment


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



编辑完后,点击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清除






3、使用

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

libjpeg-turbo地址
libjpeg-turbo Github下载地址
Linux NDK下载
libjpeg-turbo Github下载地址
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  libjpeg