[Android] cross compile settings
โ๐ป cross compile
Android์์ ๋์ํ ์ ์๋ ๋ฐ์ด๋๋ฆฌ ํ๋ก๊ทธ๋จ์ x64 ์ปดํจํฐ์์ ์ปดํ์ผํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ค๋ฃฌ๋ค.
QtCreator๋ฅผ ์ด์ฉํด์ ์ปดํ์ผ ๋ฐฉ์์ ์ ์ ์๋๋ฐ, ์ปดํ์ผ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์๋ค.
- arm64
/home/hoho/Android/Sdk/ndk/25.1.8937393/toolchains/llvm/prebuilt/linux-x86_64/bin/clang -target aarch64-linux-android23 -o hello-world hello-world.c
- arm32
/home/hoho/Android/Sdk/ndk/25.1.8937393/toolchains/llvm/prebuilt/linux-x86_64/bin/clang -target armv7a-linux-androideabi23 -o hello-world hello-world.c
ํ์ง๋ง ๋งค๋ฒ ์ด๋ ๊ฒ ๊ธด ๋ช ๋ น์ด๋ฅผ ์น๋ ๊ฒ์ด ๋ณต์กํ ๋ฟ๋ง ์๋๋ผ ๋ฒ๊ฑฐ๋กญ๋ค. ๋ฐ๋ผ์ ์ด๋ฅผ ์ฝ๊ฒ ์ปดํ์ผํ๊ธฐ ์ํ ๋ฐฉ์์ ๋ค๋ฃจ๊ณ ์ ํ๋ค.
cmake,.profile ๋ฑ ๋ค์ํ ๋ฐฉ๋ฒ์ด ์์ง๋ง, ์ด๋ฒ article ์์๋ ~/.bashrc ๋ฅผ ์ด์ฉํ ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช ํ๊ณ ์ ํ๋ค.
โ๐ป ๊ฐํธํ(c)
clang๊ณผ clang++์ ๊ฐ๊ฐ c์ cpp๋ก ๋ ํ๋ก๊ทธ๋จ์ ์ปดํ์ผํ๋๋ฐ ์ฌ์ฉ๋๋ค. ์ด์ค์ ๋จผ์ c์ปดํ์ผํ๊ธฐ ์ํด ์ถ๊ฐ๋ ๊ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
Android NDK
ANDROID_NDK_ROOT=/home/hoho/Android/Sdk/ndk/25.1.8937393
ANDROID_TOOLCHAIN=$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin
function compile_android() {
local arch=$1
local compiler=$2
for file in *.c
do
filename="${file%.*}"
case $arch in
x86_64)
$compiler $file -o $filename.x86_64
;;
arm64)
$compiler -target aarch64-linux-android23 $file -o $filename.arm64
;;
arm32)
$compiler -target armv7a-linux-androideabi23 $file -o $filename.arm32
;;
esac
done
}
NDK ๊ฒฝ๋ก๋ฅผ ์ค์ ํด์ฃผ๊ณ , ์ํคํ
์ฒ๋ง๋ค ์คํํ๋ ๋ช
๋ น์ด๋ฅผ ๋ฌ๋ฆฌํ์ฌ ๋ฑ๋กํ์๋ค.
๊ทธ ํ์ ๋ค์๊ณผ ๊ฐ์ด ๋ช
๋ น์ด๋ฅผ ์ค์ ํ๋ค.
alias android-x86_64-cc="compile_android x86_64 gcc"
alias android-arm64-cc="compile_android arm64 $ANDROID_TOOLCHAIN/clang"
alias android-arm32-cc="compile_android arm32 $ANDROID_TOOLCHAIN/clang"
โ๐ป ๊ฐํธํ(cpp)
cpp๋ ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํ ์ ์๋ค.
ANDROID_NDK_ROOT=/home/hoho/Android/Sdk/ndk/25.1.8937393
ANDROID_TOOLCHAIN=$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin
function compile_android_cpp() {
local arch=$1
local compiler=$2
for file in *.cpp
do
filename="${file%.*}"
case $arch in
x86_64)
$compiler $file -o $filename.x86_64
;;
arm64)
$compiler -target aarch64-linux-android23 $file -o $filename.arm64
;;
arm32)
$compiler -target armv7a-linux-androideabi23 $file -o $filename.arm32
;;
esac
done
}
๊ทธ ํ์ ๋ช ๋ น์ด๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํ๋ค.
alias android-x86_64-cpp="compile_android_cpp x86_64 g++"
alias android-arm64-cpp="compile_android_cpp arm64 $ANDROID_TOOLCHAIN/clang++"
alias android-arm32-cpp="compile_android_cpp arm32 $ANDROID_TOOLCHAIN/clang++"
์ปดํ์ผํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ค.
โ๐ป ๊ฒฐ๋ก
cpp ์ฝ๋์ ๊ฒฝ์ฐ์๋ dependency๋ฅผ ๋ฐ๋ก ์ถ๊ฐํด์ผ ํ๋ค. dependency์ ๋ํด์๋ ๋ค์์ ๋ค๋ฃฐ ์์ ์ด๋ค.
Leave a comment