首页 » 追远求索 » libjpeg-turbo编译

libjpeg-turbo编译

19年5月 竹清助手 追远求索

libjpeg-turbo
libjpeg是专门处理Jpeg解码、编码、转码的自由软件库。libjpeg-turbo是其fork版本,还有一个基于libjpeg-turbo的fork的版本是MozJpeg。
个人理解,3者的区别和优势:

libjpeg 功能全面强大持续更新特性
libjpeg-turbo 基于精简指令集优化,以及编码算法优化,速度号称可以达到2-4x的libjpeg的编解码速度。Android机型实际测试速度基本在2x,图像质量持平。
MozJpeg 基于libjpeg-turbo,长于编码文件能达到10%的优化。但是编码耗时长。4k图片在vivo NEX S上编码在5s+。

编译
目前libjpeg-turbo最新版本在2.0.1。编译方式也不同于之前的1.5.x版本。官方在BUILDING.md有具体说明。比如 Android armv7a版本如下:
# Set these variables to suit your needs
NDK_PATH={full path to the “ndk” directory– for example, /opt/android/sdk/ndk-bundle}
BUILD_PLATFORM={the platform name for the NDK package you installed–
for example, “windows-x86” or “linux-x86_64” or “darwin-x86_64”}
TOOLCHAIN_VERSION={“4.8”, “4.9”, “clang3.5”, etc. This corresponds to a
toolchain directory under ${NDK_PATH}/toolchains/.}
ANDROID_VERSION={The minimum version of Android to support– for example,
“16”, “19”, etc.}

# It should not be necessary to modify the rest
HOST=arm-linux-androideabi
SYSROOT=${NDK_PATH}/platforms/android-${ANDROID_VERSION}/arch-arm
export CFLAGS="-march=armv7-a -mfloat-abi=softfp -fprefetch-loop-arrays \
  -D__ANDROID_API__=${ANDROID_VERSION} --sysroot=${SYSROOT} \
  -isystem ${NDK_PATH}/sysroot/usr/include \
  -isystem ${NDK_PATH}/sysroot/usr/include/${HOST}"
export LDFLAGS=-pie
TOOLCHAIN=${NDK_PATH}/toolchains/${HOST}-${TOOLCHAIN_VERSION}/prebuilt/${BUILD_PLATFORM}

cd {build_directory}

cat <<EOF >toolchain.cmake
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(CMAKE_C_COMPILER ${TOOLCHAIN}/bin/${HOST}-gcc)
set(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN}/${HOST})
EOF

cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \
  -DCMAKE_POSITION_INDEPENDENT_CODE=1 \
  

[additional CMake flags]

{source_directory} make

按照上面的模板其实就可以编译。但是要注意点是cmake得配cmake官方下载的版本,而不是Android 编译NDK下载的cmake。看网上有人用android的cmake编译,实际试过只有x86_64版本成功了,其他版本有各种的问题。
实际可运行的脚本可以参考,然后再根据自己需要再行更改就好了。

libjpeg-turbo比libjpeg 现在版本升级到2.0.0,基于CMake编译。依然还是一样,按照官网介绍,libjpeg-turbo比libjpeg快2-6倍,得益于它高度优化的哈夫曼算法。在许多情况下,libjpeg-turbo的性能可与专有的高速JPEG编解码器相媲美.那如何去编译呢?
一:编译环境准备:

1、安装NDK环境

2、下载 libjpeg-turbo-2.0.0下载 libjpeg-turbo-2.0.0

3、安装Cmake ,如何安装:链接

二 :编译

1、下载并解压源码 libjpeg-turbo-2.0.0.tar.gz

2、我们将参照源码中的BUILDING.md编译,github地址BUILDING.md

3、切换到源码目录,编写脚本build.sh

#!/bin/bash
# Set these variables to suit your needs
NDK_PATH=/Library/Android/sdk/ndk-bundle
BUILD_PLATFORM=darwin-x86_64
TOOLCHAIN_VERSION=4.9
ANDROID_VERSION=14

#添加cmake环境变量
export PATH="/Applications/CMake.app/Contents/bin":"$PATH"
MY_SOURCE_DIR=$(pwd)
PREFIX=$(pwd)/android


# It should not be necessary to modify the rest
HOST=arm-linux-androideabi
SYSROOT=${NDK_PATH}/platforms/android-${ANDROID_VERSION}/arch-arm
export CFLAGS="-march=armv7-a -mfloat-abi=softfp -fprefetch-loop-arrays \
  -D__ANDROID_API__=${ANDROID_VERSION} --sysroot=${SYSROOT} \
  -isystem ${NDK_PATH}/sysroot/usr/include \
  -isystem ${NDK_PATH}/sysroot/usr/include/${HOST}"
export LDFLAGS=-pie
TOOLCHAIN=${NDK_PATH}/toolchains/${HOST}-${TOOLCHAIN_VERSION}/prebuilt/${BUILD_PLATFORM}

cat <<EOF >toolchain.cmake
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(CMAKE_C_COMPILER ${TOOLCHAIN}/bin/${HOST}-gcc)
set(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN}/${HOST})
EOF

cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \
    -DCMAKE_POSITION_INDEPENDENT_CODE=1 \
    -DCMAKE_INSTALL_PREFIX=${PREFIX} \
    ${MY_SOURCE_DIR}

make clean
make
make install

4、执行./build.sh.进行编译

5、编译成功:

CMake是一个比make更高级的跨平台的安装、编译、配置工具,可以用简单的语句来描述所有平台的安装(编译过程)。并根据不同平台、不同的编译器,生成相应的Makefile或者project文件。本文主要介绍在Mac OSX上安装配置CMake的方法,笔者所使用的OS X版本是macOS Sierra。

首先,你要去CMake的网站上下载它的安装文件(官网下载地址:https://cmake.org/download/),选择下图中红框所标注出来的选项。

下载完成后,就像在OS X下安装一般的程序那样安装它。完成后,CMake的图标就会出现在你的Launchpad中,如下图所示。

点击上面这个图标打开CMake的GUI程序。你可能会受到如下提示,选择【Open】然后程序可以成功打开。

启动程序后从菜单栏中选择【Tools】,然后从下拉菜单中选择“How to Install For Command Line Use”,便会弹出一个对话框,这个对话框提示你该如何配置,从而使得在命令行中也能够直接使用CMake命令。

我们主要关注其中的前两种方法。首先,如果你在命令行中输入 cmake –version,你会发现系统并不认识cmake这个命令。然后使用上面图中给出的第一种方法,即在命令行中输入PATH=”/Applications/CMake.app/Contents/bin”:”$PATH”,如下图所示。此后,再执行跟cmake有关的命令,系统就可以正确识别它了。

但是,这个方法只能管一时(这跟Ubuntu下的情况类似),当你关闭命令行窗口后,再重新开启一个命令行窗口,系统仍然表示无法识别cmake命令。所以我们来尝试第二种方法。在新开的命令行窗口中输入(最好是从CMake的GUI对话框上直接复制,以免输错)

sudo “/Applications/CMake.app/Contents/bin/cmake-gui” –install

此时,再次打开新的命令行窗口,cmake也可以正常运行了!

打赏
如果文章对您有帮助,欢迎点击上方按钮给作者一点鼓励。
说点什么
Loading...
Prev Post Next Post
已跳转到上次阅读的位置,从头阅读?