【Android 内存优化】libjpeg-turbo 函数库交叉编译 ( libjpeg-turbo 函数库下载 | libjpeg-turbo 编译文档 | 环境准备 | NASM 安装 )
文章目錄
- 一、 libjpeg-turbo 函數庫下載與解壓
- 二、 libjpeg-turbo 編譯文檔
- 三、 編譯前環境準備
- 四、 安裝 NASM 匯編工具
- 1、 下載 NASM 匯編工具
- 2、 拷貝解壓 NASM 源碼
- 3、 編譯安裝 nasm-2.15
- 五、 編譯 Android 平臺使用的 libjpeg-turbo 函數庫參考 ( 官方提供 | 僅供參考 )
- 1、ARMv7 (32-bit)
- 2、ARMv8 (64-bit)
- 3、x86 (32-bit)
- 4、x86-64 (64-bit)
一、 libjpeg-turbo 函數庫下載與解壓
在上一篇博客 【Android 內存優化】Android 原生 API 圖片壓縮原理 ( 哈夫曼編碼開關 | 哈夫曼編碼原理 | libjpeg-turbo 函數庫 ) 對哈夫曼編碼進行了介紹 , 如果需要在所有的 Android 手機上使用哈夫曼編碼壓縮圖片, 那就需要使用 libjpeg-turbo 函數庫 , 從 libjpeg-turbo/libjpeg-turbo GitHub 項目的 Release 發布版本頁面 下載 Release 版本的源碼 , 這里下載最新的 Source code (tar.gz) 源碼 ;
拷貝源碼到 Ubuntu : 源碼下載完畢后 , 將源碼 libjpeg-turbo-2.0.5.tar.gz 拷貝到 Ubuntu 虛擬機中 , 在 /root/ 目錄下創建 picture_compress 目錄 , 將源碼拷貝到該目錄下 ;
解壓源碼 : 執行 tar xvf libjpeg-turbo-2.0.5.tar.gz 命令 , 解壓 libjpeg-turbo 函數庫源碼 ;
$ tar xvf libjpeg-turbo-2.0.5.tar.gz二、 libjpeg-turbo 編譯文檔
編譯文檔 :
查看 libjpeg-turbo 函數庫的 ReadMe 信息 , 查找如何編譯該函數庫 ;
官方提示 , 讓我們查看 BUILDING.md 文件 , 里面有詳細的編譯文檔 ; ( 可以點擊該鏈接 , 直接跳轉查看該文件 )
三、 編譯前環境準備
在 BUILDING.md 中提供了編譯指導 , 在 Build Requirements 中說明了編譯前應該準備好的環境 ;
編譯前環境準備 :
① CMake 工具 : 安裝 2.8.12 以上的 CMake 工具 ;
② 匯編工具 : 安裝 NASM or YASM 工具 , 建議使用 2.10 版本以上的 NASM 工具 ;
④ GCC 編譯器 : 4.1 以上的 GCC 工具 , 這里交叉編譯使用 NDK 中的 GCC 工具即可 ;
⑤ JDK 工具 : 1.5 以上的 JDK , 用于生成 Java 調用庫 , 此處只需要編譯 C 語言部分即可 ;
四、 安裝 NASM 匯編工具
1、 下載 NASM 匯編工具
下載 NASM 匯編工具 :
編譯需要安裝 NASM 或者 YASM , 這是匯編工具 ;
NASM 下載地址 : http://www.nasm.us/pub/nasm/releasebuilds
選擇最新的發布版本 : 2.15 版本 , 昨天剛發布的 ;
在 https://www.nasm.us/pub/nasm/releasebuilds/2.15/ 頁面下載 nasm-2.15.tar.gz 壓縮包 ; 也可以直接點擊 此處連接下載 ;
2、 拷貝解壓 NASM 源碼
拷貝文件 : 將該文件拷貝到 Ubuntu 系統中的 /root/picture_compress 目錄中 ;
解壓該文件 : 調用 tar xvf nasm-2.15.tar.gz 命令 , 解壓該文件 ;
$ tar xvf nasm-2.15.tar.gz該目錄中的文件情況 : 有 libjpeg-turbo-2.0.5 , libjpeg-turbo-2.0.5.tar.gz , nasm-2.15 , nasm-2.15.tar.gz 四個文件或目錄 ;
root@octopus:~/picture_compress# ls libjpeg-turbo-2.0.5 libjpeg-turbo-2.0.5.tar.gz nasm-2.15 nasm-2.15.tar.gz root@octopus:~/picture_compress#3、 編譯安裝 nasm-2.15
編譯 nasm-2.15 :
① 生成 Makefile 文件 : 進入 nasm-2.15 目錄 , 執行 ./configure 命令 , 先生成 Makefile 文件 ;
$ ./configure執行上述命令 , 最終會生成 Makefile 文件 ;
root@octopus:~/picture_compress/nasm-2.15# ./configure checking for prefix by checking for nasm... no checking build system type... x86_64-pc-linux-gnu checking host system type... x86_64-pc-linux-gnu checking for gcc... gcc// ... 省略一萬行 checking if gcc supports C99 external inlines... yes configure: creating ./config.status config.status: creating Makefile config.status: creating doc/Makefile config.status: creating config/config.h root@octopus:~/picture_compress/nasm-2.15#② 編譯安裝 : 在/root/picture_compress/nasm-2.15 目錄下執行 make install 命令 , 編譯安裝 nasm-2.15 匯編工具 ;
$ make install編譯完成后 , 該工具即可使用 ;
root@octopus:~/picture_compress/nasm-2.15# make install gcc -c -g -O2 -fwrapv -U__STRICT_ANSI__ -fno-common -Werror=attributes -ffunction-sections -fdata-sections -fvisibility=hidden -Wall -W -pedantic -Wc90-c99-compat -Wno-long-long -Wno-shift-negative-value -Werror=implicit -Werror=missing-braces -Werror=return-type -Werror=trigraphs -Werror=pointer-arith -Werror=missing-prototypes -Werror=missing-declarations -Werror=comment -Werror=vla -DHAVE_CONFIG_H -I. -I. -I./include -I./include -I./x86 -I./x86 -I./asm -I./asm -I./disasm -I./disasm -I./output -I./output -o asm/nasm.o asm/nasm.c// 省略 ...I./output -I./output -Wl,--gc-sections -o ndisasm disasm/ndisasm.o libnasm.a /bin/mkdir -p /usr/local/bin /usr/bin/install -c nasm /usr/local/bin/nasm /usr/bin/install -c ndisasm /usr/local/bin/ndisasm /bin/mkdir -p /usr/local/share/man/man1 /usr/bin/install -c -m 644 ./nasm.1 /usr/local/share/man/man1/nasm.1 /usr/bin/install -c -m 644 ./ndisasm.1 /usr/local/share/man/man1/ndisasm.1 root@octopus:~/picture_compress/nasm-2.15#下面的操作在老版本中才需要 , 新版本 , 不需要執行下面的操作 ; ( 非必要操作 , 僅做參考 )
安裝 autoconf 工具 :
$ sudo apt install autoconf進入 /root/picture_compress/libjpeg-turbo-xxx 目錄 , 執行 autoreconf -fiv 命令 ;
$ autoreconf -fiv五、 編譯 Android 平臺使用的 libjpeg-turbo 函數庫參考 ( 官方提供 | 僅供參考 )
NDK 要求 : Android NDK , 必須使用 v13b 以上的版本 ;
下方的配置來源與 https://github.com/libjpeg-turbo/libjpeg-turbo/blame/master/BUILDING.md ;
下面的編譯腳本僅做參考 , 實際編譯時還是使用之前熟悉的 configure 配置生成 Makefile 文件 ; 這里僅參考其中的配置信息 ;
1、ARMv7 (32-bit)
交叉編譯通用腳本 , 編譯 ARMv7 (32-bit) CPU 架構函數庫 ;
# Set these variables to suit your needsNDK_PATH={full path to the NDK directory-- for example,/opt/android/android-ndk-r16b}TOOLCHAIN={"gcc" or "clang"-- "gcc" must be used with NDK r16b and earlier,and "clang" must be used with NDK r17c and later}ANDROID_VERSION={the minimum version of Android to support-- for example,"16", "19", etc.}cd {build_directory}cmake -G"Unix Makefiles" \-DANDROID_ABI=armeabi-v7a \-DANDROID_ARM_MODE=arm \-DANDROID_PLATFORM=android-${ANDROID_VERSION} \-DANDROID_TOOLCHAIN=${TOOLCHAIN} \-DCMAKE_ASM_FLAGS="--target=arm-linux-androideabi${ANDROID_VERSION}" \-DCMAKE_TOOLCHAIN_FILE=${NDK_PATH}/build/cmake/android.toolchain.cmake \[additional CMake flags] {source_directory}make2、ARMv8 (64-bit)
交叉編譯通用腳本 , 編譯 ARMv8 (64-bit) CPU 架構函數庫 ;
# Set these variables to suit your needsNDK_PATH={full path to the NDK directory-- for example,/opt/android/android-ndk-r16b}TOOLCHAIN={"gcc" or "clang"-- "gcc" must be used with NDK r14b and earlier,and "clang" must be used with NDK r17c and later}ANDROID_VERSION={the minimum version of Android to support. "21" or lateris required for a 64-bit build.}cd {build_directory}cmake -G"Unix Makefiles" \-DANDROID_ABI=arm64-v8a \-DANDROID_ARM_MODE=arm \-DANDROID_PLATFORM=android-${ANDROID_VERSION} \-DANDROID_TOOLCHAIN=${TOOLCHAIN} \-DCMAKE_ASM_FLAGS="--target=aarch64-linux-android${ANDROID_VERSION}" \-DCMAKE_TOOLCHAIN_FILE=${NDK_PATH}/build/cmake/android.toolchain.cmake \[additional CMake flags] {source_directory}make3、x86 (32-bit)
交叉編譯通用腳本 , 編譯 x86 (32-bit) CPU 架構函數庫 ;
# Set these variables to suit your needsNDK_PATH={full path to the NDK directory-- for example,/opt/android/android-ndk-r16b}TOOLCHAIN={"gcc" or "clang"-- "gcc" must be used with NDK r14b and earlier,and "clang" must be used with NDK r17c and later}ANDROID_VERSION={The minimum version of Android to support-- for example,"16", "19", etc.}cd {build_directory}cmake -G"Unix Makefiles" \-DANDROID_ABI=x86 \-DANDROID_PLATFORM=android-${ANDROID_VERSION} \-DANDROID_TOOLCHAIN=${TOOLCHAIN} \-DCMAKE_TOOLCHAIN_FILE=${NDK_PATH}/build/cmake/android.toolchain.cmake \[additional CMake flags] {source_directory}make4、x86-64 (64-bit)
交叉編譯通用腳本 , 編譯 x86-64 (64-bit) CPU 架構函數庫 ;
# Set these variables to suit your needsNDK_PATH={full path to the NDK directory-- for example,/opt/android/android-ndk-r16b}TOOLCHAIN={"gcc" or "clang"-- "gcc" must be used with NDK r14b and earlier,and "clang" must be used with NDK r17c and later}ANDROID_VERSION={the minimum version of Android to support. "21" or lateris required for a 64-bit build.}cd {build_directory}cmake -G"Unix Makefiles" \-DANDROID_ABI=x86_64 \-DANDROID_PLATFORM=android-${ANDROID_VERSION} \-DANDROID_TOOLCHAIN=${TOOLCHAIN} \-DCMAKE_TOOLCHAIN_FILE=${NDK_PATH}/build/cmake/android.toolchain.cmake \[additional CMake flags] {source_directory}make總結
以上是生活随笔為你收集整理的【Android 内存优化】libjpeg-turbo 函数库交叉编译 ( libjpeg-turbo 函数库下载 | libjpeg-turbo 编译文档 | 环境准备 | NASM 安装 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android 内存优化】Androi
- 下一篇: 【Android 内存优化】libjpe