这篇文章是对这两天工作的一个总结,在MacOS上编译target版本Mobile VLC for ios成功,其实这本来是个很简单的事情,不过中间还是出现了不少问题,由于自己本身从来没有接触过MacoS,更没有做过ios上的开发,所以还是折腾了几天,不过最后终归是折腾出来了,呵呵,只要功夫深,贴车磨成针,^_^,好了,不废话了。
开发平台:
MacOS X Lion 10.7.5, Xcode4.4 , SDK(IphoneOS.5.1)
一:
在开始编译工作之前需要保证自己有开发者权限和license,这一步很重要,我当时就是由于没有开发者权限导致编译出错,而这个错误没有接触过apple产品的童鞋很难解决。
二:
到该网站上http://www.videolan.org/vlc/download-ios.html下载 vlc for ios的三个源代码文件,并解压到某个工作目录,比如分别命名为MediaLibraryKit MobileVLC vlc
三:
替换vlc/extras/package/build_ios.sh位下面的脚本文件, 根据自己的平台做相应的修改,主要是修改两个地方
1. SDK 的路径 ,5.0之前的SDK是/Developer/......., 我们下载的代码中的就是针对5.0以前的SDK,而我们现在使用的SDK大多说都是5.1以后的,5.1以后的SDK的路径是
/Applications/Xcode.app/......,
2. SDK的版本 将其中的5.1换成自己使用的SDK的版本号
点击(此处)折叠或打开
- #!/bin/sh
- set -e
-
- echo "Building libvlc for the iOS"
-
- if [ "$1" = "Simulator" ]; then
- PLATFORM="Simulator"
- TARGET="i686-apple-darwin10"
- ARCH="i386"
- else
- PLATFORM="OS"
- TARGET="arm-apple-darwin10"
- ARCH="armv7"
- OPTIM="-mno-thumb"
- fi
-
- THIS_SCRIPT_PATH=`pwd`/$0
-
- pushd `dirname $0`/../../..
- VLCROOT=`pwd` # Let's make sure VLCROOT is an absolute path
- popd
- DEVROOT="/Applications/Xcode.app/Contents/Developer/Platforms/iPhone${PLATFORM}.platform/Developer"
- IOS_SDK_ROOT="${DEVROOT}/SDKs/iPhone${PLATFORM}5.1.sdk"
-
- BUILDDIR=${VLCROOT}/build-ios-${PLATFORM}
-
- PREFIX=${VLCROOT}/install-ios-${PLATFORM}
-
- IOS_GAS_PREPROCESSOR="${VLCROOT}/extras/package/ios/resources/gas-preprocessor.pl"
-
- export AR="${DEVROOT}/usr/bin/ar"
- export RANLIB="${DEVROOT}/usr/bin/ranlib"
- export CFLAGS="-isysroot ${IOS_SDK_ROOT} -arch ${ARCH} -miphoneos-version-min=5.0 ${OPTIM}"
- export OBJCFLAGS="${CFLAGS}"
- if [ "$PLATFORM" = "Simulator" ]; then
- # Use the new ABI on simulator, else we can't build
- export OBJCFLAGS="-fobjc-abi-version=2 -fobjc-legacy-dispatch ${OBJCFLAGS}"
- fi
- export CPPFLAGS="${CFLAGS}"
- export CXXFLAGS="${CFLAGS}"
- export CPP="${DEVROOT}/usr/bin/llvm-cpp-4.2"
- export CXXCPP="${DEVROOT}/usr/bin/llvm-cpp-4.2"
-
- export CC="${DEVROOT}/usr/bin/llvm-gcc-4.2"
- export OBJC="${DEVROOT}/usr/bin/llvm-gcc-4.2"
- export CXX="${DEVROOT}/usr/bin/llvm-g++-4.2"
- export LD="${DEVROOT}/usr/bin/ld"
- export STRIP="${DEVROOT}/usr/bin/strip"
-
- if [ "$PLATFORM" = "OS" ]; then
- export LDFLAGS="-L${IOS_SDK_ROOT}/usr/lib -L${IOS_SDK_ROOT}/usr/lib/system -arch ${ARCH}"
- else
- export LDFLAGS="-syslibroot=${IOS_SDK_ROOT}/ -arch ${ARCH}"
- fi
-
- export PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:${VLCROOT}/extras/contrib/build/bin:${VLCROOT}/extras/package/ios/resources"
-
- echo "Boostraping contribs"
- pushd ${
VLCROOT}/extras/contrib
-
- # contains gas-processor.pl
- export PATH=$PATH:${
VLCROOT}/extras/package/ios/resources
-
- # The contrib will read the following
- export IOS_SDK_ROOT
-
- echo "Building contrib for iOS"
- ./bootstrap ${
TARGET} ios
- make src
-
- echo "Building contrib for current host"
- ./bootstrap
- make
-
- popd
-
- if [ "$PLATFORM" = "OS" ]; then
- export AS="${IOS_GAS_PREPROCESSOR} ${CC}"
- export ASCPP="${IOS_GAS_PREPROCESSOR} ${CC}"
- else
- export AS="${DEVROOT}/usr/bin/as"
- export ASCPP="${DEVROOT}/usr/bin/as"
- fi
-
-
- echo "Bootstraping vlc"
- if ! [ -e ${
VLCROOT}/configure ]; then
- ${
VLCROOT}/bootstrap
- fi
-
- if [ ".$PLATFORM" != ".Simulator" ]; then
- # FIXME - Do we still need this?
- export AVCODEC_CFLAGS="-I${PREFIX}include"
- export AVCODEC_LIBS="-L${PREFIX}lib -lavcodec -lavutil -lz"
- export AVFORMAT_CFLAGS="-I${PREFIX}include"
- export AVFORMAT_LIBS="-L${PREFIX}lib -lavcodec -lz -lavutil -lavformat"
- fi
-
- mkdir -p ${
BUILDDIR}
- pushd ${
BUILDDIR}
-
- # Run configure only upon changes.
- if [ "${VLCROOT}/configure" -nt config.log -o
- "${THIS_SCRIPT_PATH}" -nt config.log ]; then
- CONTRIB_DIR=${
VLCROOT}/extras/contrib/hosts/${
TARGET}/ios
- ${
VLCROOT}/configure
- --prefix="$PREFIX"
- --host="${TARGET}"
- --enable-debug
- --disable-shared
- --enable-static
- --disable-macosx
- --disable-macosx-defaults
- --disable-macosx-vout
- --disable-macosx-dialog-provider
- --disable-macosx-qtcapture
- --disable-macosx-eyetv
- --disable-macosx-vlc-app
- --with-macosx-sdk=${
IO_SDK_ROOT}
- --enable-audioqueue
- --enable-ios-vout
- --enable-avcodec
- --enable-avformat
- --enable-swscale
- --enable-faad
- --disable-mad
- --disable-a52
- --disable-fribidi
- --disable-macosx-audio
- --disable-qt4 --disable-skins2
- --disable-libgcrypt
- --disable-remoteosd
- --disable-vcd
- --disable-postproc
- --disable-vlc
- --disable-vlm
- --disable-httpd
- --disable-nls
- --disable-glx
- --disable-visual
- --disable-lua
- --disable-sse
- --disable-neon
- --disable-mmx # MMX and SSE support requires llvm which is broken on Simulator
- fi
-
- CORE_COUNT=`sysctl -n machdep.cpu.core_count`
- let MAKE_JOBS=$CORE_COUNT+1
-
- echo "Running make -j$MAKE_JOBS"
-
- make -j$MAKE_JOBS
- make install
- popd
三:
替换MobileVLC/buildMobileVLC.sh为下面的代码, 同样需要根据自己SDK的版本号加以修改。这个是编译执行的总脚本,这个脚本会调用刚才修改的vlc/extras/package/build_ios.sh,然后build_ios.sh会去调用vlc/extras/contrib/bootstrap脚本,这样最终实现整个工程的编译
点击(此处)折叠或打开
- #!/bin/bash
-
-
- rm -rf ./MediaLibraryKit/External/MobileVLCKit
- rm -rf ./MobileVLC/External/MobileVLCKit
- rm -rf ./MobileVLC/External/MediaLibraryKit
-
- if [ "$1" = "Simulator" ]; then
- pushd vlc
- echo "--==-- Build for vlc (simulator version) --==--"
- pushd extras/package/ios
- ./build_for_iOS.sh Simulator
- popd
-
- echo "--==-- Build for vlc-MobileVLCKit (simulator version) --==--"
- pushd projects/macosx/framework
- xcodebuild -project MobileVLCKit.xcodeproj -target "Aggregate static plugins" -configuration "Release" -sdk iphonesimulator5.1 SDKROOT=iphonesimulator5.1 VALID_ARCHS=i386 ARCHS=i386
- xcodebuild -project MobileVLCKit.xcodeproj -target "MobileVLCKit" -configuration "Release" -sdk iphonesimulator5.1 SDKROOT=iphonesimulator5.1 VALID_ARCHS=i386 ARCHS=i386
- popd
- popd
-
- echo "--==-- Build for MediaLibraryKit (simulator version) --==--"
- pushd MediaLibraryKit
- ln -s ../../vlc/projects/macosx/framework/build/Release-iphonesimulator External/MobileVLCKit
- xcodebuild -project MobileMediaLibraryKit.xcodeproj -configuration "Release" -sdk iphonesimulator5.1 SDKROOT=iphonesimulator5.1 VALID_ARCHS=i386 ARCHS=i386
- popd
-
- echo "--==-- Build for MobileVLC (simulator version) --==--"
- pushd MobileVLC
- ln -s ../.