1.下载源码到mac
2.打开终端,解压源码 tar xvf mono-VERSION.tar.gz
3.进入源码目录 cd mono-VERSION
4.配置
在mono源码目录中创建文本文件xcrun,将以下命令拷贝进去,在终端中执行./xcrun,完成之后,可以在mono_target目录中看到已经安装完成的三个目录,armv7,armv7s,sim
注意1:如果源码不是从git克隆出来,而是从官方下载的tar源码包,编译过程出现找不到route.h的情况,则可能源码中缺少这个文件,可以从git库中拷贝此文件。
注意2:如果编译过程出现cannot run test program while cross compiling 错误,可以根据提示,打开configure文件,修改对应的条件选项使跳过错误检查。参考:http://blog.csdn.net/qihuanfengyun/article/details/5385043
#!/bin/bash
BUILD_I386_IOS_SIM=1
BUILD_ARMV7_IPHONE=1
BUILD_ARMV7S_IPHONE=1
BUILD_TARGET=mono_target
IOS_MIN_SDK=6.1
(
PWD=`pwd`
PREFIX=${PWD}/${BUILD_TARGET}
rm -rf ${PREFIX}
mkdir -p ${PREFIX}
EXTRA_MAKE_FLAGS="-j4"
XCODEDIR=`xcode-select --print-path`
IOS_SDK=$(xcodebuild -showsdks | grep iphoneos | sort | head -n 1 | awk '{print $NF}')
SIM_SDK=$(xcodebuild -showsdks | grep iphonesimulator | sort | head -n 1 | awk '{print $NF}')
IPHONEOS_PLATFORM=${XCODEDIR}/Platforms/iPhoneOS.platform
IPHONEOS_SYSROOT=${IPHONEOS_PLATFORM}/Developer/SDKs/${IOS_SDK}.sdk
IPHONESIMULATOR_PLATFORM=${XCODEDIR}/Platforms/iPhoneSimulator.platform
IPHONESIMULATOR_SYSROOT=${IPHONESIMULATOR_PLATFORM}/Developer/SDKs/${SIM_SDK}.sdk
CC=clang
CFLAGS="-O2 -std=gnu99 -DHOST_IOS"
CXX=clang
CXXFLAGS="${CFLAGS} -stdlib=libc++"
LDFLAGS="-stdlib=libc++"
LIBS="-lc++ -lc++abi"
CPP="xcrun -sdk iphoneos cpp"
AR="xcrun -sdk iphoneos ar rcu"
CPPFLAGS="${CFLAGS}"
if [ $BUILD_ARMV7_IPHONE -eq 1 ]
then
echo "##################"
echo " armv7 for iPhone"
echo "##################"
(
make clean
./configure --enable-small-config=yes --with-ikvm-native=no --with-sigaltstack=no --with-tls=pthread --without-mcs-docs --disable-mcs-build --enable-nls=no --enable-minimal=profiler,logging,full_messages,reflection_emit,reflection_emit_save --build=x86_64-apple-darwin --host=armv7-apple-darwin --prefix="${PREFIX}/armv7" CC=clang "CFLAGS=${CFLAGS} -miphoneos-version-min=${IOS_MIN_SDK} -arch armv7 -isysroot ${IPHONEOS_SYSROOT}" "CXX=${CXX}" "CXXFLAGS=${CXXFLAGS} -arch armv7 -isysroot ${IPHONEOS_SYSROOT}" LDFLAGS="-arch armv7 -miphoneos-version-min=${IOS_MIN_SDK} ${LDFLAGS}" "LIBS=${LIBS}"
make ${EXTRA_MAKE_FLAGS}
make ${EXTRA_MAKE_FLAGS} install
)
fi
if [ $BUILD_ARMV7S_IPHONE -eq 1 ]
then
echo "###################"
echo " armv7s for iPhone"
echo "###################"
(
make clean
./configure --enable-small-config=yes --with-ikvm-native=no --with-sigaltstack=no --with-tls=pthread --without-mcs-docs --disable-mcs-build --enable-nls=no --enable-minimal=profiler,logging,full_messages,reflection_emit,reflection_emit_save --build=x86_64-apple-darwin --host=armv7s-apple-darwin --prefix="${PREFIX}/armv7s" "CC=${CC}" "CFLAGS=${CFLAGS} -miphoneos-version-min=${IOS_MIN_SDK} -arch armv7s -isysroot ${IPHONEOS_SYSROOT}" "CXX=${CXX}" "CXXFLAGS=${CXXFLAGS} -arch armv7s -isysroot ${IPHONEOS_SYSROOT}" LDFLAGS="-arch armv7s -miphoneos-version-min=${IOS_MIN_SDK} ${LDFLAGS}" "LIBS=${LIBS}"
make ${EXTRA_MAKE_FLAGS}
make ${EXTRA_MAKE_FLAGS} install
)
fi
if [ $BUILD_I386_IOS_SIM -eq 1 ]
then
echo "###########################"
echo " i386 for iPhone Simulator"
echo "###########################"
(
make clean
./configure --enable-small-config=yes --with-ikvm-native=no --with-sigaltstack=no --with-tls=pthread --without-mcs-docs --disable-mcs-build --enable-nls=no --enable-minimal=profiler,logging,full_messages,reflection_emit,reflection_emit_save --build=x86_64-apple-darwin --host=i386-apple-darwin --prefix="${PREFIX}/sim" "CC=${CC}" "CFLAGS=${CFLAGS} -miphoneos-version-min=${IOS_MIN_SDK} -arch i386 -isysroot ${IPHONESIMULATOR_SYSROOT}" "CXX=${CXX}" "CXXFLAGS=${CXXFLAGS} -arch i386 -isysroot ${IPHONESIMULATOR_SYSROOT}" LDFLAGS="-arch i386 -miphoneos-version-min=${IOS_MIN_SDK} ${LDFLAGS}" "LIBS=${LIBS}"
make ${EXTRA_MAKE_FLAGS}
make ${EXTRA_MAKE_FLAGS} install
)
fi
) 2>&1
#) >build.log 2>&1
echo "done"