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