3
3

More than 5 years have passed since last update.

MacでiOS/Androidコンパイル(個人メモ)

Last updated at Posted at 2015-06-07

全くの備忘用個人的メモ。
調べるたび追記、間違いもたくさん書くと思うので、判明すれば修正。

  • iOSコンパイル情報設定
iOSコンパイル情報設定
default_iphoneos_version=7.1
default_architecture=armv7

export IPHONEOS_DEPLOYMENT_TARGET="${IPHONEOS_DEPLOYMENT_TARGET:-$default_iphoneos_version}"
DEFAULT_ARCHITECTURE="${DEFAULT_ARCHITECTURE:-$default_architecture}"

target=$1
shift

case $target in

        device )
        arch="${DEFAULT_ARCHITECTURE}"
        platform=iphoneos
        extra_cflags=" "
        ;;

        simulator )
        arch=i386
        platform=iphonesimulator
        extra_cflags="-D__IPHONE_OS_VERSION_MIN_REQUIRED=${IPHONEOS_DEPLOYMENT_TARGET%%.*}0000"
        ;;

        * )
        echo No target found!!!
        usage
        exit 2

esac
if [ $arch = "arm64" ]
    then
    host="arm-apple-darwin"
else
    host="${arch}-apple-darwin"
    extra_cflags="${extra_cflags} -DHAVE_LONG_LONG"
fi

platform_dir=`xcrun -find -sdk ${platform} --show-sdk-platform-path`
platform_sdk_dir=`xcrun -find -sdk ${platform} --show-sdk-path`
prefix="${prefix}/${arch}/${platform}${IPHONEOS_DEPLOYMENT_TARGET}.sdk"

#setup compiler flags
export CC=`xcrun -find -sdk iphoneos gcc`
export CFLAGS="-Wno-error=implicit-function-declaration -arch ${arch} -pipe -Os -gdwarf-2 -isysroot ${platform_sdk_dir} ${extra_cflags}"
export LDFLAGS="-arch ${arch} -isysroot ${platform_sdk_dir}"
export CXX=`xcrun -find -sdk iphoneos g++`
export CXXFLAGS="${CFLAGS}"
export CPP=`xcrun -find -sdk iphoneos cpp`
export CXXCPP="${CPP}"
export AR=`xcrun -find -sdk iphoneos ar`
export RANLIB=`xcrun -find -sdk iphoneos ranlib`
  • Androidコンパイル情報設定
Androidコンパイル情報設定
default_android_version=17
default_architecture=armeabi
default_ndk_root=/android-ndk-r10d

export ANDROID_DEPLOYMENT_TARGET="${ANDROID_DEPLOYMENT_TARGET:-$default_android_version}"
DEFAULT_ARCHITECTURE="${DEFAULT_ARCHITECTURE:-$default_architecture}"
NDK_ROOT="${NDK_ROOT:-$default_ndk_root}" 

archname="${DEFAULT_ARCHITECTURE}"
arch="${archname}"
archdir="${arch}"

case $arch in

        mips )
        extra_cflags=" "
        extra_ldflags=" "
        host="mipsel-linux-android"
        ;;

        x86 )
        extra_cflags=" "
        extra_ldflags=" "
        host="i686-linux-android"
        ;;

        armeabi )
        arch=arm
        extra_cflags="-mthumb"
        extra_ldflags=" "
        host="arm-linux-androideabi"
        ;;

        armeabi-v7a )
        arch=arm
        extra_cflags="-march=armv7-a -mfloat-abi=softfp"
        extra_ldflags="-Wl,--fix-cortex-a8"
        host="arm-linux-androideabi"
        ;;

        * )
        echo No valid architecture found!!!
        usage
        exit 2

esac

#create toolchain if necesary
toolchain=`pwd`/android-${ANDROID_DEPLOYMENT_TARGET}-toolchain-${arch}
if [ ! -e ${toolchain} ]
then
    echo toolchain missing, creating
    ${NDK_ROOT}/build/tools/make-standalone-toolchain.sh \
        --platform=android-${ANDROID_DEPLOYMENT_TARGET} \
        --install-dir=${toolchain} \
        --arch=${arch} --system=darwin-x86_64
fi
export PATH=${toolchain}/bin:$PATH

#setup compiler flags
export CC="${toolchain}/bin/${host}-gcc"
export LIBS="-lsupc++ -lstdc++"
export CFLAGS="${extra_cflags} -DHAVE_LONG_LONG -pipe -Os -gdwarf-2"
export LDFLAGS="${extra_ldflags}"
export CXX="${toolchain}/bin/${host}-g++"
export CXXFLAGS="${CFLAGS}"
export CPP="${toolchain}/bin/${host}-cpp"
export CXXCPP="${CPP}"
  • 静的ライブラリの作り方(iOS)
静的ライブラリ
${CXX} ${CXXFLAGS} -c -I. src_a.cpp -o src_a.o
${CXX} ${CXXFLAGS} -c -I. src_b.cxx -o src_b.o
${AR} -rcs libSrc.a src_a.o src_b.o
${RANLIB} libSrc.a
  • Sharedライブラリの作り方(Android)
Sharedライブラリ
${CXX} ${CXXFLAGS} -c -fPIC -I. src_a.cpp -o src_a.o
${CXX} ${CXXFLAGS} -c -fPIC -I. src_b.cxx -o src_b.o 
${CC} -shared -Wl,-soname,libSrc.so.1 -I. -o libSrc.so src_a.o src_b.o
  • シンボルテーブル確認(iOS)
シンボルテーブル確認
nm libSrc.a
  • ライブラリのアーキテクチャ確認(iOS)
アーキテクチャ確認
lipo -info libSrc.a
  • ライブラリのアーキテクチャ、シンボルテーブル確認(Android)
アーキテクチャ、シンボルテーブル確認
[各アーキテクチャのツールチェイン]/bin/[アーキテクチャ]-objdump -x libSrc.so | more
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3