Windows平台下编译LibjpegTurbo的静态库.a文件和动态库.so文件

Posted by 卢小胖 on 2019-09-06
Estimated Reading Time 2 Minutes
Words 703 In Total
Viewed Times

LibjpegTurbo

既然你看到这篇文章了,大概了解了LibjpegTurbo的作用了。这里不做多的介绍,官方生成LibjpegTurbo速度能提升2-6倍,根据实际测试,Turbo版本确实有提升,但是1.5.x版本和2.0.x版本速度差距较大,我们选择最新的release版本libjpeg2.0

下载:https://sourceforge.net/projects/libjpeg-turbo/

编译方法

  • cmake+nasm+mingw编译静态库
  • Androidstudio编译动态库

AndroidStudio自带cmake编译工具和NDK,提供非常便捷的编译方式。我们首先介绍方法一。

Androidstudio编译动态库

  1. AS下载cmake和ndk,还需要自行下载一份ndk-16b,因为libjpegturbo编译可能对NDK有要求,如果在ndk-20上出现问题,可以换用ndk-16
  2. 下载2.0.x以上源码,不建议1.5.x
  3. 用AS创建C++项目,将源码放在cpp目录下面,如下图:

image

  1. 配置build.gradle,选择cmake path如下:
externalNativeBuild {
cmake {
path "src/main/cpp/libjpeg-turbo-1.5.3/CMakeLists.txt"
version "3.10.2"
}
}
externalNativeBuild {
cmake {
cppFlags "-std=c++11"
//cppFlags "-std=c++11 -frtti -fexceptions"
//arguments "-DANDROID_PLATFORM=22"
// Passes optional arguments to CMake.
arguments "-DANDROID_ARM_NEON=TRUE", "-DANDROID_TOOLCHAIN=clang"
// Sets optional flags for the C compiler.
cFlags "-D_EXAMPLE_C_FLAG1", "-D_EXAMPLE_C_FLAG2"
// Sets a flag to enable format macro constants for the C++ compiler.
cppFlags "-D__STDC_FORMAT_MACROS"
}

ndk {
abiFilters 'armeabi-v7a','arm64-v8a','x86', 'x86_64'
//abiFilters "arm64-v8a"
}

}
  1. 配置好后,在上方build中选择make project。
  2. 同时尽量选择release版本,因为debug和release编译的so文件,实际测试速度差异巨大,release版本要快很多。配置如下图:image

原生cmake编译

需要的软件环境:

  1. libjpeg-turbo 源码
  2. CMake v2.8.8 或以上版本
  • 安装时勾选“Add CMake to the system PATH …”,或把CMake安装路径手动添加到系统环境变量PATH中。
  • 安装完之后在命令提示符工具中使用“cmake -version”验证是否安装配置成功。
  1. MinGW
  • 如果在Windows系统上构建,推荐使用MinGW-builds或tdm-gcc。它们能够在开始菜单生成一个启动相应编译器的命令提示符链接。
  • 由于本机安装了MinGW,所以就不再需要上面提到的那两个工具了,只需确保“mingw32-make.exe”的安装路径在系统环境变量PATH中即可。
  • 安装完之后在命令提示符工具中使用“mingw32-make -version”验证是否安装配置成功。
  1. NASM

NASM0.98 或以上版本(如果构建64位库则需要NASM 2.05或以上版本)。下载NASM后解压,只需把NASM目录手动添加到系统环境变量PATH中即可。

编译:

  1. 源码目录创建build文件夹
  2. 打开cmd
cd {build_directory}
cmake -G "MinGW Makefiles" {source_directory}
mingw32-make

最后等到编译完成就可以了。目录如下:

image