这篇文章是对这两天工作的一个总结,在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 ../../vlc/projects/macosx/framework/build/Release-iphonesimulator External/MobileVLCKit
- ln -s ../../MediaLibraryKit/build/Release-iphonesimulator External/MediaLibraryKit
- xcodebuild -project MobileVLC.xcodeproj -configuration "Release" -sdk iphonesimulator5.1 SDKROOT=iphonesimulator5.1 VALID_ARCHS=i386 ARCHS=i386
- popd
- else
- pushd vlc
- echo "--==-- Build for vlc (os version) --==--"
- pushd extras/package/ios
- ./build_for_iOS.sh
- popd
- echo "--==-- Build for vlc-MobileVLCKit (os version) --==--"
- pushd projects/macosx/framework
- xcodebuild -project MobileVLCKit.xcodeproj -target "Aggregate static plugins" -configuration "Release" -sdk iphoneos5.1 SDKROOT=iphoneos5.1 VALID_ARCHS=armv7 ARCHS=armv7
- xcodebuild -project MobileVLCKit.xcodeproj -target "MobileVLCKit" -configuration "Release" -sdk iphoneos5.1 SDKROOT=iphoneos5.1 VALID_ARCHS=armv7 ARCHS=armv7
- popd
- popd
- echo "--==-- Build for MediaLibraryKit (os version) --==--"
- pushd MediaLibraryKit
- ln -s ../../vlc/projects/macosx/framework/build/Release-iphoneos External/MobileVLCKit
- xcodebuild -project MobileMediaLibraryKit.xcodeproj -configuration "Release" -sdk iphoneos5.1 SDKROOT=iphoneos5.1 VALID_ARCHS=armv7 ARCHS=armv7
- popd
- echo "--==-- Build for MobileVLC (os version) --==--"
- pushd MobileVLC
- ln -s ../../vlc/projects/macosx/framework/build/Release-iphoneos External/MobileVLCKit
- ln -s ../../MediaLibraryKit/build/Release-iphoneos External/MediaLibraryKit
- xcodebuild -project MobileVLC.xcodeproj -configuration "Release" -sdk iphoneos5.1 SDKROOT=iphoneos5.1 VALID_ARCHS=armv7 ARCHS=armv7
- popd
- fi
四:
刚才说了build_ios.sh会去调用 vlc/extras/contrib里的bootstrap,所以bootstrap的内容要修改如下,其中mac版本需要根据自己系统mac版本加以修改,如为10.8的请把其中10.7的文本都替换为10.8
点击(此处)折叠或打开
- #!/bin/sh
- # ***************************************************************************
- # bootstrap : Set up config.mak
- # ***************************************************************************
- # Copyright (C) 2003-2009 the VideoLAN team
- # $Id$
- #
- # Authors: Christophe Massiot <massiot@via.ecp.fr>
- # Derk-Jan Hartman <hartman at videolan dot org>
- # Felix Paul Kühne <fkuehne at videolan dot org>
- #
- # This program is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation; either version 2 of the License, or
- # (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program; if not, write to the Free Software
- # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- # ***************************************************************************
-
- if test "$#" -gt "2" -o "$1" = "-h" -o "$1" = "--help" ; then
- echo "Usage: $0 [host [distro]]" >&2
- echo " Prepare config.mak file." >&2
- exit 1
- fi
-
- LANG=C
- export LANG
- set -e
- set +x
-
- BUILD=`gcc -dumpmachine`
- if test "$#" -ge "1"; then
- HOST="$1"
- else
- HOST="$BUILD"
- fi
-
- DISTRO=
- if test "$#" = "2"; then
- echo "Forcing distro.mak to use $2.mak"
- DISTRO="$2"
- HOST="$1"
- fi
-
- rm -f config.mak
- {
- echo "# Automatically generated by bootstrap."
- echo "# Make changes if you know what you're doing."
- } > config.mak
-
- rm -f distro.mak
- {
- echo "# Automatically generated by bootstrap"
- echo "# Make changes if you know what you're doing."
- } > distro.mak
-
- if test "$HOST" != "$BUILD"; then
- if test -z "$CC"; then
- CC="${HOST}-gcc"
- fi
- if test -z "$CXX"; then
- CXX="${HOST}-g++"
- fi
- if test -z "$LD"; then
- LD="${HOST}-ld"
- fi
- if test -z "$RANLIB"; then
- RANLIB="${HOST}-ranlib"
- fi
- if test -z "$AR"; then
- AR="${HOST}-ar"
- fi
- if test -z "$STRIP"; then
- STRIP="${HOST}-strip"
- fi
- fi
-
- case $HOST in
- *powerpc*|*ppc*)
- ARCH="ppc"
- ;;
- *86_64*)
- ARCH="x86_64"
- ;;
- *86*)
- ARCH="i386"
- ;;
- arm*eabi)
- ARCH="armel"
- ;;
- arm*)
- ARCH="arm"
- ;;
- esac
- echo "ARCH = $ARCH" >> config.mak
-
- # Check the HAVE_{OS}
- case $HOST in
- *darwin*)
- echo "HAVE_DARWIN_OS = 1" >> config.mak
- echo "HAVE_BSD = 1" >> config.mak
- ;;
- *linux*)
- echo "HAVE_LINUX = 1" >> config.mak
- ;;
- *bsd*)
- echo "HAVE_BSD = 1" >> config.mak
- ;;
- *wince*)
- echo "HAVE_WINCE = 1" >> config.mak
- ;;
- esac
-
- case $DISTRO$HOST in
- ppc-darwin)
- # Mac OS X < 10.4
- echo "Your version of Mac OS X is too old!" >&2
- echo "Compiling VLC requires 10.5.x or later" >&2
- exit 1
- ;;
- *-apple-darwin8)
- echo "Your version of Mac OS X is too old!" >&2
- echo "Compiling and running VLC requires 10.5.x or later" >&2
- exit 1
- ;;
- powerpc-apple-darwin9)
- SDK_TARGET=10.7
- echo "SDK_TARGET = ${SDK_TARGET}" >> config.mak
- echo "ENVP = MACOSX_DEPLOYMENT_TARGET=${SDK_TARGET}" >> config.mak
- echo "MACOSX_SDK = /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk" >> config.mak
- echo "HAVE_DARWIN_9 = 1" >> config.mak
- HAVE_DARWIN_9=1
- HAVE_DARWIN_32=1
- CFLAGS_TUNING=" -arch ppc -mtune=G4"
- EXTRA_CFLAGS=" -D${ENVP} -isysroot ${MACOSX_SDK} -mmacosx-version-min=${SDK_TARGET}"
- EXTRA_LDFLAGS=" -arch ppc -isysroot ${MACOSX_SDK} -mmacosx-version-min=${SDK_TARGET} -Wl,-syslibroot,${MACOSX_SDK}"
- CC="/Applications/Xcode.app/Contents/Developer/usr/bin/gcc-4.2"
- CXX="/Applications/Xcode.app/Contents/Developer/usr/bin/g++-4.2"
- LD="ld -arch ppc -syslibroot ${MACOSX_SDK} -mmacosx-version-min=${SDK_TARGET}"
- echo "PATH = /bin:/usr/bin:/usr/local/bin:" >> config.mak
- DISTRO=darwin
- if test -e /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs; then
- echo "SDKs found. Everything is fine." >&2
- else
- echo "ERROR:nYour Developer Tools' SDKs were not found.nYou need to add extra symbolic links to /Developer to achieve correctlynbuilt contribs.nHave a look at the OSX-Compile-HOWTO for details." >&2
- exit 1
- fi
- ;;
- i686-apple-darwin*)
- echo "Building for $DISTRO"
- SDK_TARGET=10.7
- MIN_LD_VERSION_WITH_TEXT_RELOCATION=81
- echo "SDK_TARGET = ${SDK_TARGET}" >> config.mak
- echo "HAVE_DARWIN_OS_ON_INTEL = 1" >> config.mak
- echo "HAVE_DARWIN_9 = 1" >> config.mak
- HAVE_DARWIN_9=1
- if test `ld -v 2> /dev/stdout | sed -E 's/.*ld64-([0-9]+).*/1/'` -lt ${MIN_LD_VERSION_WITH_TEXT_RELOCATION}; then
- echo "ERROR: Your ld version is unable to compile VLC.nUpdate to Xcode 3.1 or higher." >&2
- exit 1
- fi
- echo "ENVP = MACOSX_DEPLOYMENT_TARGET=${SDK_TARGET}" >> config.mak
- echo "MACOSX_SDK = /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk" >> config.mak
- HAVE_DARWIN_32=1
- CFLAGS_TUNING=" -march=prescott -mtune=generic -arch i386 -m32"
- EXTRA_CFLAGS=" -D${ENVP} -isysroot ${MACOSX_SDK} -mmacosx-version-min=${SDK_TARGET}"
- EXTRA_LDFLAGS=" -arch i386 -isysroot ${MACOSX_SDK} -Wl,-syslibroot,${MACOSX_SDK} -mmacosx-version-min=${SDK_TARGET}"
- CC="/Applications/Xcode.app/Contents/Developer/usr/bin/gcc-4.2"
- CXX="/Applications/Xcode.app/Contents/Developer/usr/bin/g++-4.2"
- echo "PATH = /bin:/usr/bin:/usr/local/bin" >> config.mak
- DISTRO=darwin
- if test -e /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs; then
- echo "SDKs found. Everything is fine." >&2
- else
- echo "ERROR:nYour Developer Tools' SDKs were not found.nYou need to add extra symbolic links to /Developer to achieve correctlynbuilt contribs.nHave a look at the OSX-Compile-HOWTO for details." >&2
- exit 1
- fi
- if test $HOST = "i686-apple-darwin10"; then
- echo "HAVE_DARWIN_10 = 1" >> config.mak
- fi
- ;;
- x86_64-apple-darwin*)
- SDK_TARGET=10.7
- echo "SDK_TARGET = ${SDK_TARGET}" >> config.mak
- echo "HAVE_DARWIN_OS_ON_INTEL = 1" >> config.mak
- echo "HAVE_DARWIN_9 = 1" >> config.mak
- echo "ENVP = MACOSX_DEPLOYMENT_TARGET=${SDK_TARGET}" >> config.mak
- echo "MACOSX_SDK = /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX${SDK_TARGET}.sdk" >> config.mak
- HAVE_DARWIN_64=1
- CFLAGS_TUNING=" -march=core2 -mtune=core2 -m64 -arch x86_64"
- echo "HAVE_DARWIN_64 = 1" >> config.mak
- EXTRA_CFLAGS=" -D${ENVP} -isysroot ${MACOSX_SDK} -mmacosx-version-min=${SDK_TARGET}"
- EXTRA_LDFLAGS=" -arch x86_64 -isysroot ${MACOSX_SDK} -Wl,-syslibroot,${MACOSX_SDK} -mmacosx-version-min=${SDK_TARGET}"
- echo "PATH = /bin:/usr/bin:/usr/local/bin" >> config.mak
- CC="/Applications/Xcode.app/Contents/Developer/usr/bin/gcc-4.2"
- CXX="/Applications/Xcode.app/Contents/Developer/usr/bin/g++-4.2"
- LD="ld"
- RANLIB="ranlib"
- AR="ar"
- STRIP="strip"
- DISTRO=darwin64
- if test -e /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs; then
- echo "SDKs found. Everything is fine." >&2
- else
- echo "ERROR:nYour Developer Tools' SDKs were not found.nYou need to add extra symbolic links to /Developer to achieve correctlynbuilt contribs.nHave a look at the OSX-Compile-HOWTO for details." >&2
- exit 1
- fi
- if test $HOST = "x86_64-apple-darwin10"; then
- echo "HAVE_DARWIN_10 = 1" >> config.mak
- fi
- ;;
- *mingw32ce)
- echo "HAVE_WINCE = 1" >> config.mak
- echo "PKG_CONFIG_PATH = $(PREFIX)/lib/pkgconfig" >> config.mak
- EXTRA_CPPFLAGS=" -D_WIN32_WCE=0x0500"
- DISTRO=wince
- ;;
- *64-*mingw*)
- echo "HAVE_WIN64 = 1" >> config.mak
- echo "HAVE_WIN32 = 1" >> config.mak
- echo "PKG_CONFIG_PATH = $(PREFIX)/lib/pkgconfig" >> config.mak
- EXTRA_CFLAGS="-O3"
- DISTRO=win64
- ;;
- *mingw32*)
- echo "HAVE_WIN32 = 1" >> config.mak
- echo "PKG_CONFIG_PATH = $(PREFIX)/lib/pkgconfig" >> config.mak
- EXTRA_CFLAGS=" -O3 -march=i686 -mtune=generic"
- DISTRO=win32
- ;;
- i686-pc-cygwin)
- echo "HAVE_WIN32 = 1" >> config.mak
- echo "HAVE_CYGWIN = 1" >> config.mak
- CC="gcc -mno-cygwin -isystem /usr/include/mingw"
- CXX="g++ -mno-cygwin -isystem /usr/include/mingw"
- HOST=`$CC -dumpmachine`
- EXTRA_CFLAGS=" -mno-cygwin -isystem /usr/include/mingw"
- EXTRA_CPPFLAGS=" -mno-cygwin -isystem /usr/include/mingw"
- EXTRA_LDFLAGS=" -mno-cygwin"
- echo "PKG_CONFIG_PATH = $(PREFIX)/lib/pkgconfig" >> config.mak
- DISTRO=win32
- ;;
- arm-wince-pe)
- echo "PKG_CONFIG_PATH = $(PREFIX)/lib/pkgconfig" >> config.mak
- EXTRA_CPPFLAGS=" -D_WIN32_WCE"
- DISTRO=wince
- ;;
- armeb-linux-uclibc)
- echo "HAVE_UCLIBC = 1" >> config.mak
- echo "HAVE_BIGENDIAN = 1" >> config.mak
- EXTRA_CFLAGS="-Os -march=armv5 -msoft-float"
- ;;
- arm-none-linux-gnueabi)
- if test -f /etc/maemo_version; then
- DISTRO=maemo
- echo 'HAVE_MAEMO = 1' >> config.mak
- EXTRA_CFLAGS=" -mcpu=cortex-a8 -mtune=cortex-a8 -march=armv7-a"
- EXTRA_CFLAGS="$EXTRA_CFLAGS -mfpu=neon -mfloat-abi=softfp"
- EXTRA_CFLAGS="$EXTRA_CFLAGS -O3 -fno-tree-vectorize"
- else
- EXTRA_CFLAGS="-msoft-float"
- fi
- ;;
- *86_64*linux*)
- EXTRA_CFLAGS=" -fPIC"
- EXTRA_CPPFLAGS=" -fPIC"
- EXTRA_LDFLAGS=" -L/usr/lib64"
- echo "LIBRARY_PATH = /usr/lib64" >> config.mak
- echo "PKG_CONFIG_PATH = /usr/lib64/pkgconfig" >> config.mak
- echo "PKG_CONFIG_LIBDIR = /usr/lib64/pkgconfig" >> config.mak
- ;;
- *arm-apple-darwin*)
- EXTRA_CFLAGS=" -arch armv7"
- EXTRA_LDFLAGS=" -arch armv7"
- DISTRO="ios"
- ;;
- esac
- case "$DISTRO" in
- ios)
- echo 'HAVE_IOS = 1' >> config.mak
- if test -z "$IOS_SDK_ROOT"; then
- echo "ERROR:nThe bootstrap script requires the IOS_SDK_ROOT environment variable to be set when building for iOS !"
- exit 1
- fi
- EXTRA_CFLAGS+=" $CFLAGS"
- EXTRA_LDFLAGS+=" $LDFLAGS"
- EXTRA_CPPFLAGS+=" $CPPFLAGS"
- EXTRA_CXXFLAGS+=" $CXXFLAGS"
- echo "IOS_SDK_ROOT = ${IOS_SDK_ROOT}" >> config.mak
- ;;
- esac
-
- if test -z "${DISTRO}" -a "$HOST" = "$BUILD"; then
- if test -d "/usr/lib/pkgconfig"; then
- if test -z "$PKG_CONFIG_PATH"; then
- echo "PKG_CONFIG_PATH = /usr/lib/pkgconfig" >> config.mak
- fi
- if test -z "$PKG_CONFIG_LIBDIR"; then
- echo "PKG_CONFIG_LIBDIR = /usr/lib/pkgconfig" >> config.mak
- fi
- fi
- # Try to match distribution
- if test -f /etc/fedora-release; then
- DISTRO=fedora
- elif test -f /etc/maemo_version; then
- DISTRO=maemo
- echo 'HAVE_MAEMO = 1' >> config.mak
- elif test -f /etc/debian_version; then
- # NOTE: check for Debian *after* its derivatives
- DISTRO=debian
- fi
- fi
-
- # Default Unix-like systems
- test -z "${DISTRO}" && DISTRO=unix
-
- echo "BUILD = $BUILD" >> config.mak
- echo "HOST = $HOST" >> config.mak
-
- echo "PREFIX = `pwd`/hosts/$HOST/$DISTRO" >> config.mak
-
- mkdir -p hosts/$HOST
- ln -sfn $DISTRO hosts/$HOST/default_distro
-
- if [ "$HOST" = "$BUILD" ]; then
- ln -sfn hosts/$HOST/$DISTRO build
- fi
-
- echo "CC = ${CC}" >> config.mak
- echo "CXX = ${CXX}" >> config.mak
- echo "LD = ${LD}" >> config.mak
- echo "RANLIB = ${RANLIB}" >> config.mak
- echo "AR = ${AR}" >> config.mak
- echo "STRIP = ${STRIP}" >> config.mak
- echo "EXTRA_CFLAGS = ${CFLAGS_TUNING} ${EXTRA_CFLAGS}" >> config.mak
- echo "EXTRA_CPPFLAGS = ${EXTRA_CPPFLAGS} -isystem $(PREFIX)/include" >> config.mak
- echo "EXTRA_LDFLAGS = ${EXTRA_LDFLAGS}" >> config.mak
- echo "EXTRA_PATH = ${EXTRA_PATH}" >> config.mak
- echo "DISTRO = ${DISTRO}" >> config.mak
-
- #CMAKE
- if test "$HOST" != "$BUILD"; then
- if test ${DISTRO} = "win32"; then
- echo "SET(CMAKE_SYSTEM_NAME Windows)" >> toolchain.cmake
- fi
- echo "SET(CMAKE_C_COMPILER ${CC})" >> toolchain.cmake
- echo "SET(CMAKE_CXX_COMPILER ${CXX})" >> toolchain.cmake
- echo "SET(CMAKE_FIND_ROOT_PATH `pwd` )" >> toolchain.cmake
- echo "set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)" >> toolchain.cmake
- echo "set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)" >> toolchain.cmake
- echo "set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)" >> toolchain.cmake
- fi
-
- if wget --version >/dev/null 2>&1; then
- echo "WGET = "`which wget`" -c --passive" >> config.mak
- elif test -z `curl --version >/dev/null 2>&1`; then
- echo "WGET = "`which curl`" -L -O" >> config.mak
- else
- echo "You need at least wget or curl to fetch the packages." >&2
- exit 1
- fi
-
- if svn --version >/dev/null 2>&1; then
- echo "SVN = "`which svn`"" >> config.mak
- else
- echo "You do not have a subversion client in your PATH." >&2
- fi
-
- if git --version>/dev/null 2>&1; then
- echo "GIT = "`which git`"" >> config.mak
- else
- echo "You do not have a Git client in your PATH." >&2
- fi
-
- if test -z "$CONTRIBS_RELEASE"; then
- echo "EXTRA_CFLAGS += -DNDEBUG" >> config.mak
- set +x
- echo
- echo "*****************************************************************"
- echo "* If you need contribs with all debug information, run this *"
- echo "* line and compile the libraries on your own. *"
- echo "* CONTRIBS_RELEASE=no ./bootstrap *"
- echo "*****************************************************************"
- fi
-
- if test $HAVE_DARWIN_9; then
- set +x
- echo
- echo "*****************************************************************"
- echo "* We are using GCC-4.2 on OS X, so compilation WILL FAIL if it *"
- echo "* is NOT installed. *"
- echo "*****************************************************************"
- fi
-
- if test $HAVE_DARWIN_32; then
- set +x
- echo
- echo "*****************************************************************"
- echo "* VLC will be compiled in 32bit mode. *"
- echo "* *"
- echo "* Re-run with the x86_64-apple-darwin* argument to turn on *"
- echo "* 64bit compilation for Intel-based Macs, whereas * is either *"
- echo "* 9 or 10 depending on your Darwin version. *"
- echo "* There is NO PPC64 support right now. *"
- echo "*****************************************************************"
- fi
-
- if test $HAVE_DARWIN_64; then
- set +x
- echo
- echo "*****************************************************************"
- echo "* VLC will be compiled in 64bit mode using the 10.5 SDK. *"
- echo "*****************************************************************"
- set -x
- fi
-
- case `uname` in
- Linux)
- CPUS=`grep -c ^processor /proc/cpuinfo`
- ;;
- *)
- CPUS=1 # default
- ;;
- esac
- echo "MAKEJOBS = -j$CPUS" >> config.mak
-
- echo
- echo "Using $CPUS processors"
修改vlc/extras/contrib/src目录下的Makefile, 禁用汇编,否则会编译出错。 搜寻关键字“FFMPEGCONF”,使其加入"--disable-asm"参数。如果用vim编辑Makefile文件,在底行模式下输入“:/FFMPEGCON”,这样会搜索到FFMPEGCONF,然后修改为FFMPEGCONF=--disable-asm
六:
至于网上有的文章说的下面的一步,我发现下面的i386目录和其中的limits.h和_limits.h两个文件时存在的,所以不需要创建,如果你发现你的没有这个目录,那么请做下一步
为了编译libdvbpsi库,稍稍修改iOS SDK的源文件。这是因为编译时会报错说找不到"i386/limits.h",所以需要把这个文件拷贝到他的搜寻目录中去。具体原因见后面的纠错Troubleshotting章节。
- a) 找到目录:/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/usr/include
- b) 在其中新建目录:i386
- c) 全局搜索某个i386目录下的limits.h和_limits.h文件,并将搜索到的这两个文件拷贝入刚才创建的目录中
七:
Ok,到现在为止,准备工作已经就绪,可以开始编译工作了,到工作目录下,也就是刚开始解压三个源文件所在的目录执行
总的编译脚本文件 ./MobileVLC/buildMobileVLC.sh,这个过程一般会出现错误,一般是下载文件出现错误,因为这个脚本会首先去下载ffmpeg的库,和faad2的音频库,还有live555库(用来支持RTSP协议栈的),还有contrib-macosx-i386-34.tar.bz2,这个文件下载几乎必然出错,可以到网上手动下载这个包放到相应目录加以替换。一切顺利的话,最后会都出现BUILD SUCCESSFUL
八: 编译过程中遇到的问题总结
1. ffmpeg打 patch的时候出错,这个错误无关紧要,可以忽略,再次执行脚本的时候会继续执行,跳过这个错误
2. 下载其他包的时候出错
"/usr/bin/curl" -L -O http://live555.com/liveMedia/public/live555-latest.tar.gz
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 565k 100 565k 0 0 9522 0 0:01:00 0:01:00 --:--:-- 39832
要检查一下下载是不是像上面一样是100%,因为这个源码给出的下载地址是很久以前的了,很多会出错,一定要检查每一个包都下载完全,后面出现的错误大多数都与这个有关,比如我之前编译一直出现下面这样一个错误
sr/kevin/VLC_IOS/vlc/projects/macosx/framework/build/Release-iphoneos/libMobileVLCKit.a
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: -dynamic not specified the following flags are invalid: -ObjC
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: can't open file: /usr/kevin/VLC_IOS/vlc/projects/macosx/framework/../../../extras/contrib/hosts/arm-apple-darwin10/ios/lib/libBasicUsageEnvironment.a (No such file or directory)
我找了很久最后发现就是因为前面的一些包没有下载完全,或者下载的仅仅是个html文件,这点一定要去相关的目录下用file命令确认。这样类似的错误就是因为前面的包没有完全下载而导致libMobileVLCKit.a静态库生成不了,才会出现。最后再强调一下,一定要保证所有的包都下载完全,可以到log里详细的查看,编译的log可以重定向到一个文件来保存,以方便查看。
比如:./buildMobileVLC.sh > log.txt
3.编译之前一定要确定自己的网络不受限制,我之前折腾了很久就是因为公司的网络限制了很多网页不能访问,就因为这个我调试了一两天,实在是太郁闷了,最后拿了个3G上网卡才解决的。如果你在公司里面编译,那么请确认你的网络是不是受限,也可以将需要下载的包在别的网络下载下来放到相应的目录下。
4.一定要有开法者权限和apple的授权
Code Sign error: The identity 'iPhone Developer' doesn't match any valid, non-expired certificate/private key pair in your keychains
这个错误就是没有apple的授权和证书,由于之前没有接触过apple的开发,所以这个错误让我一头雾水。这个需要购买apple的license或者破解,此刻又让我对Linux即开源软件多了一分敬意,还有video lan组织,向你们致以崇高的敬意。