Mac下コンパイルLibjpegTurbo
MacプラットフォームコンパイルLibjpegturboのメリット:
Windows、linux(Ubuntu)、macの下で異なる方法でコンパイルして、最後に実際にテストして、macプラットフォームの下で、cmake(非AS持参)でコンパイルする性能が一番いいです.
1.DebugとReleaseバージョンの違い:
debugは主にテストに使用され、releaseは主に正式バージョンに使用されます.理屈は同じですが、実際のテストの過程で、debugバージョンの性能は非常に悪く、Androidでの表現は原生の方法に及ばず、releaseバージョンの向上は非常に大きく、例えば、debugバージョンは1080 Pの画像を圧縮するのに150 msかかり、releaseバージョンは10-30 msしかかかりません.
2.cmakeとasコンパイルの違い:
asはcmakeコンパイルツールを持っていて、10と6の2つの大きなバージョンしかありませんが、コンパイルされた考えの多くは理想的ではありません.性能が劣る.そこで、独自のコンパイルチェーンツールcmakeを選択し、shスクリプトコンパイルを作成しました.ASコンパイルの方法で私の前のいくつかの文章を見ることができて、以下はcmakeコンパイルだけを紹介します.
3.macでコンパイルする理由:
異なるプラットフォームの異なるツールの下でコンパイルした結果はすべて異なると述べた.macプラットフォームの下でコンパイルされた.soファイルは、携帯電話のcpu常用フレームv 8 aを例にとると、1080 P画像を1枚圧縮するのに10 msしかかかりませんが、他のプラットフォームでコンパイルするファイルは30 ms必要で、差は非常に大きいです.Windowsとlinuxを実測してもこの効果は得られません.
コンパイルの準備:ソースコードのダウンロード、https://sourceforge.net/projects/libjpeg-turbo/推奨ダウンロード2.0.x最新バージョン ndkダウンロードは、ndk 17以前はgccコンパイルをサポートしていたが、ndk 17以降はclangコンパイルがデフォルトであるため、ndk 16 bバージョンをダウンロードする.https://developer.android.google.cn/ndk/downloads/ cmakeツールとnasmツール、インストール方法は自分でチュートリアルを探してください.
ソースコードCmakelist.txt修正
スクリプトを書く前に、ソースコードを少し修正する必要があります.主にバージョン番号を注釈します.そうしないと、コンパイルされます.soファイルにはわけのわからない接尾辞がありますよ?の
最外層の主Cmakelist.text:
sharelibフォルダの下のcmakelist.txt修正:
以上の2箇所のコメントを見つけたり、直接削除したりすればいいです.次に、スクリプトファイルの作成を開始します.
スクリプトファイルの作成:
build.sh
修正する必要があるのはndkパスで、16 bバージョンを使うことを考えています.
build_all.sh
主に各フレームをすべて実行します.
以上のスクリプトの作成が完了しました.次の手順に従います.ソースディレクトリをlibjpeg_に変更turbo(shスクリプトに対応すればいい) デスクトップにtestフォルダを新規作成し、ソースコードlibjpeg-turboフォルダと2つのスクリプトファイルを入れます. 端末を開く、 を実行する.コンパイルの完了を待つ .
エラー解決、コンパイル中によく奇妙な問題に遭遇し、霧の水になる可能性があります.最善の解決策はlogログを見て、cmakelisterror.logまたはcmakeoutput.logでは問題の根源をよく調べることができます.
最後に私がコンパイルしたファイルを添付します.https://download.csdn.net/download/qq_36332133/11676292
Windows、linux(Ubuntu)、macの下で異なる方法でコンパイルして、最後に実際にテストして、macプラットフォームの下で、cmake(非AS持参)でコンパイルする性能が一番いいです.
1.DebugとReleaseバージョンの違い:
debugは主にテストに使用され、releaseは主に正式バージョンに使用されます.理屈は同じですが、実際のテストの過程で、debugバージョンの性能は非常に悪く、Androidでの表現は原生の方法に及ばず、releaseバージョンの向上は非常に大きく、例えば、debugバージョンは1080 Pの画像を圧縮するのに150 msかかり、releaseバージョンは10-30 msしかかかりません.
2.cmakeとasコンパイルの違い:
asはcmakeコンパイルツールを持っていて、10と6の2つの大きなバージョンしかありませんが、コンパイルされた考えの多くは理想的ではありません.性能が劣る.そこで、独自のコンパイルチェーンツールcmakeを選択し、shスクリプトコンパイルを作成しました.ASコンパイルの方法で私の前のいくつかの文章を見ることができて、以下はcmakeコンパイルだけを紹介します.
3.macでコンパイルする理由:
異なるプラットフォームの異なるツールの下でコンパイルした結果はすべて異なると述べた.macプラットフォームの下でコンパイルされた.soファイルは、携帯電話のcpu常用フレームv 8 aを例にとると、1080 P画像を1枚圧縮するのに10 msしかかかりませんが、他のプラットフォームでコンパイルするファイルは30 ms必要で、差は非常に大きいです.Windowsとlinuxを実測してもこの効果は得られません.
コンパイルの準備:
ソースコードCmakelist.txt修正
スクリプトを書く前に、ソースコードを少し修正する必要があります.主にバージョン番号を注釈します.そうしないと、コンパイルされます.soファイルにはわけのわからない接尾辞がありますよ?の
最外層の主Cmakelist.text:
set_target_properties(turbojpeg PROPERTIES
SOVERSION ${TURBOJPEG_SO_MAJOR_VERSION} VERSION ${TURBOJPEG_SO_VERSION})
sharelibフォルダの下のcmakelist.txt修正:
set_target_properties(jpeg PROPERTIES SOVERSION ${SO_MAJOR_VERSION}
VERSION ${SO_MAJOR_VERSION}.${SO_AGE}.${SO_MINOR_VERSION})
以上の2箇所のコメントを見つけたり、直接削除したりすればいいです.次に、スクリプトファイルの作成を開始します.
スクリプトファイルの作成:
build.sh
修正する必要があるのはndkパスで、16 bバージョンを使うことを考えています.
#!/bin/bash
#
if [ "$#" -lt 1 ]; then
THE_ARCH=armv7
else
THE_ARCH=$(tr [A-Z] [a-z] <<< "$1")
fi
#
case "$THE_ARCH" in
arm|armv5|armv6|armv7|armeabi)
#
# toolchain
TOOLCHAIN_LEFT=arm-linux-androideabi
# android
ANDROID_PLATFORMS=arm
# CMAKE_SYSTEM_PROCESSOR
PROCESSOR_PLATFORMS=arm
# prebuilt
TOOLCHAIN_PLEBUILT=arm-linux-androideabi
# include
INCLUDE_PLATFORMS=arm-linux-androideabi
# CFLAGS
CFLAGS_MARCH="-march=armv7-a -mfloat-abi=softfp -fprefetch-loop-arrays"
#
BUILD_NAME=armeabi
;;
armv7a|armeabi-v7a)
#
# toolchain
TOOLCHAIN_LEFT=arm-linux-androideabi
# android
ANDROID_PLATFORMS=arm
# CMAKE_SYSTEM_PROCESSOR
PROCESSOR_PLATFORMS=arm
# prebuilt
TOOLCHAIN_PLEBUILT=arm-linux-androideabi
# include
INCLUDE_PLATFORMS=arm-linux-androideabi
# CFLAGS
CFLAGS_MARCH="-march=armv7-a -mfloat-abi=softfp -fprefetch-loop-arrays"
BUILD_NAME=armeabi-v7a
;;
armv8|armv8a|aarch64|arm64|arm64-v8a)
#
# toolchain
TOOLCHAIN_LEFT=aarch64-linux-android
# android
ANDROID_PLATFORMS=arm64
# CMAKE_SYSTEM_PROCESSOR
PROCESSOR_PLATFORMS=aarch64
# prebuilt
TOOLCHAIN_PLEBUILT=aarch64-linux-android
# include
INCLUDE_PLATFORMS=aarch64-linux-android
# CFLAGS
CFLAGS_MARCH=""
BUILD_NAME=arm64-v8a
;;
x86)
#
# toolchain
TOOLCHAIN_LEFT=x86
# android
ANDROID_PLATFORMS=x86
# CMAKE_SYSTEM_PROCESSOR
PROCESSOR_PLATFORMS=x86
# prebuilt
TOOLCHAIN_PLEBUILT=i686-linux-android
# include
INCLUDE_PLATFORMS=i686-linux-android
# CFLAGS
CFLAGS_MARCH=""
BUILD_NAME=x86
;;
x86_64|x64)
#
# toolchain
TOOLCHAIN_LEFT=x86_64
# android
ANDROID_PLATFORMS=x86_64
# CMAKE_SYSTEM_PROCESSOR
PROCESSOR_PLATFORMS=x86_64
# prebuilt
TOOLCHAIN_PLEBUILT=x86_64-linux-android
# include
INCLUDE_PLATFORMS=x86_64-linux-android
# CFLAGS
CFLAGS_MARCH=""
BUILD_NAME=x86_64
;;
esac
#
#ndk
NDK_PATH=/Users/alexlu/Desktop/ndk/android-ndk-r16b
# macOS
BUILD_PLATFORM=darwin-x86_64
#
TOOLCHAIN_VERSION=4.9
#
ANDROID_VERSION=21
#
SYSROOT=${NDK_PATH}/platforms/android-${ANDROID_VERSION}/arch-${ANDROID_PLATFORMS}
export CFLAGS="${CFLAGS_MARCH} -D__ANDROID_API__=${ANDROID_VERSION} --sysroot=${SYSROOT} \
-isystem ${NDK_PATH}/sysroot/usr/include \
-isystem ${NDK_PATH}/sysroot/usr/include/${INCLUDE_PLATFORMS}"
export LDFLAGS=-pie
TOOLCHAIN=${NDK_PATH}/toolchains/${TOOLCHAIN_LEFT}-${TOOLCHAIN_VERSION}/prebuilt/${BUILD_PLATFORM}
#
mkdir -p ${BUILD_NAME}
cd ${BUILD_NAME}
cat <toolchain.cmake
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR ${ANDROID_PLATFORMS})
set(CMAKE_C_COMPILER ${TOOLCHAIN}/bin/${TOOLCHAIN_PLEBUILT}-gcc)
set(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN}/${TOOLCHAIN_PLEBUILT})
EOF
cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \
-DCMAKE_POSITION_INDEPENDENT_CODE=1 \
../libjpeg-turbo #
make clean
make
make install
build_all.sh
主に各フレームをすべて実行します.
for arch in armeabi armeabi-v7a arm64-v8a x86 x86_64
do
bash build.sh $arch
done
以上のスクリプトの作成が完了しました.次の手順に従います.
1.cd desktop/test
2.sudo sh build_all.sh
(mac linux ?)
または:1. cd desktop/test
2. chmod 777 build_all.sh
3. ./build_all.sh
エラー解決、コンパイル中によく奇妙な問題に遭遇し、霧の水になる可能性があります.最善の解決策はlogログを見て、cmakelisterror.logまたはcmakeoutput.logでは問題の根源をよく調べることができます.
最後に私がコンパイルしたファイルを添付します.https://download.csdn.net/download/qq_36332133/11676292