Mac OS上编译Mobile VLC for ios

这篇文章是对这两天工作的一个总结,在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的版本号

点击(此处)折叠或打开

  1. #!/bin/sh
  2. set -e

  3. echo "Building libvlc for the iOS"

  4. if [ "$1" = "Simulator" ]; then
  5.     PLATFORM="Simulator"
  6.     TARGET="i686-apple-darwin10"
  7.     ARCH="i386"
  8. else
  9.     PLATFORM="OS"
  10.     TARGET="arm-apple-darwin10"
  11.     ARCH="armv7"
  12.     OPTIM="-mno-thumb"
  13. fi

  14. THIS_SCRIPT_PATH=`pwd`/$0

  15. pushd `dirname $0`/../../..
  16. VLCROOT=`pwd` # Let's make sure VLCROOT is an absolute path
  17. popd
  18. DEVROOT="/Applications/Xcode.app/Contents/Developer/Platforms/iPhone${PLATFORM}.platform/Developer"
  19. IOS_SDK_ROOT="${DEVROOT}/SDKs/iPhone${PLATFORM}5.1.sdk"

  20. BUILDDIR=${VLCROOT}/build-ios-${PLATFORM}

  21. PREFIX=${VLCROOT}/install-ios-${PLATFORM}

  22. IOS_GAS_PREPROCESSOR="${VLCROOT}/extras/package/ios/resources/gas-preprocessor.pl"

  23. export AR="${DEVROOT}/usr/bin/ar"
  24. export RANLIB="${DEVROOT}/usr/bin/ranlib"
  25. export CFLAGS="-isysroot ${IOS_SDK_ROOT} -arch ${ARCH} -miphoneos-version-min=5.0 ${OPTIM}"
  26. export OBJCFLAGS="${CFLAGS}"
  27. if [ "$PLATFORM" = "Simulator" ]; then
  28.     # Use the new ABI on simulator, else we can't build
  29.     export OBJCFLAGS="-fobjc-abi-version=2 -fobjc-legacy-dispatch ${OBJCFLAGS}"
  30. fi
  31. export CPPFLAGS="${CFLAGS}"
  32. export CXXFLAGS="${CFLAGS}"
  33. export CPP="${DEVROOT}/usr/bin/llvm-cpp-4.2"
  34. export CXXCPP="${DEVROOT}/usr/bin/llvm-cpp-4.2"

  35. export CC="${DEVROOT}/usr/bin/llvm-gcc-4.2"
  36. export OBJC="${DEVROOT}/usr/bin/llvm-gcc-4.2"
  37. export CXX="${DEVROOT}/usr/bin/llvm-g++-4.2"
  38. export LD="${DEVROOT}/usr/bin/ld"
  39. export STRIP="${DEVROOT}/usr/bin/strip"

  40. if [ "$PLATFORM" = "OS" ]; then
  41.   export LDFLAGS="-L${IOS_SDK_ROOT}/usr/lib -L${IOS_SDK_ROOT}/usr/lib/system -arch ${ARCH}"
  42. else
  43.   export LDFLAGS="-syslibroot=${IOS_SDK_ROOT}/ -arch ${ARCH}"
  44. fi

  45. export PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:${VLCROOT}/extras/contrib/build/bin:${VLCROOT}/extras/package/ios/resources"

  46. echo "Boostraping contribs"
  47. pushd ${VLCROOT}/extras/contrib

  48. # contains gas-processor.pl
  49. export PATH=$PATH:${VLCROOT}/extras/package/ios/resources

  50. # The contrib will read the following
  51. export IOS_SDK_ROOT

  52. echo "Building contrib for iOS"
  53. ./bootstrap ${TARGET} ios
  54. make src

  55. echo "Building contrib for current host"
  56. ./bootstrap
  57. make

  58. popd

  59. if [ "$PLATFORM" = "OS" ]; then
  60.   export AS="${IOS_GAS_PREPROCESSOR} ${CC}"
  61.   export ASCPP="${IOS_GAS_PREPROCESSOR} ${CC}"
  62. else
  63.   export AS="${DEVROOT}/usr/bin/as"
  64.   export ASCPP="${DEVROOT}/usr/bin/as"
  65. fi


  66. echo "Bootstraping vlc"
  67. if ! [ -e ${VLCROOT}/configure ]; then
  68.     ${VLCROOT}/bootstrap
  69. fi

  70. if [ ".$PLATFORM" != ".Simulator" ]; then
  71.     # FIXME - Do we still need this?
  72.     export AVCODEC_CFLAGS="-I${PREFIX}include"
  73.     export AVCODEC_LIBS="-L${PREFIX}lib -lavcodec -lavutil -lz"
  74.     export AVFORMAT_CFLAGS="-I${PREFIX}include"
  75.     export AVFORMAT_LIBS="-L${PREFIX}lib -lavcodec -lz -lavutil -lavformat"
  76. fi

  77. mkdir -p ${BUILDDIR}
  78. pushd ${BUILDDIR}

  79. # Run configure only upon changes.
  80. if [ "${VLCROOT}/configure" -nt config.log -o 
  81.      "${THIS_SCRIPT_PATH}" -nt config.log ]; then
  82. CONTRIB_DIR=${VLCROOT}/extras/contrib/hosts/${TARGET}/ios 
  83. ${VLCROOT}/configure 
  84.     --prefix="$PREFIX" 
  85.     --host="${TARGET}" 
  86.     --enable-debug 
  87.     --disable-shared 
  88.     --enable-static 
  89.     --disable-macosx 
  90.     --disable-macosx-defaults 
  91.     --disable-macosx-vout 
  92.     --disable-macosx-dialog-provider 
  93.     --disable-macosx-qtcapture 
  94.     --disable-macosx-eyetv 
  95.     --disable-macosx-vlc-app 
  96.     --with-macosx-sdk=${IO_SDK_ROOT} 
  97.     --enable-audioqueue 
  98.     --enable-ios-vout 
  99.     --enable-avcodec 
  100.     --enable-avformat 
  101.     --enable-swscale 
  102.     --enable-faad 
  103.     --disable-mad 
  104.     --disable-a52 
  105.     --disable-fribidi 
  106.     --disable-macosx-audio 
  107.     --disable-qt4 --disable-skins2 
  108.     --disable-libgcrypt 
  109.     --disable-remoteosd 
  110.     --disable-vcd 
  111.     --disable-postproc 
  112.     --disable-vlc 
  113.     --disable-vlm 
  114.     --disable-httpd 
  115.     --disable-nls 
  116.     --disable-glx 
  117.     --disable-visual 
  118.     --disable-lua 
  119.     --disable-sse 
  120.     --disable-neon 
  121.     --disable-mmx # MMX and SSE support requires llvm which is broken on Simulator
  122. fi

  123. CORE_COUNT=`sysctl -n machdep.cpu.core_count`
  124. let MAKE_JOBS=$CORE_COUNT+1

  125. echo "Running make -j$MAKE_JOBS"

  126. make -j$MAKE_JOBS
  127. make install
  128. popd

三:

替换MobileVLC/buildMobileVLC.sh为下面的代码, 同样需要根据自己SDK的版本号加以修改。这个是编译执行的总脚本,这个脚本会调用刚才修改的vlc/extras/package/build_ios.sh,然后build_ios.sh会去调用vlc/extras/contrib/bootstrap脚本,这样最终实现整个工程的编译

点击(此处)折叠或打开

  1. #!/bin/bash


  2. rm -rf ./MediaLibraryKit/External/MobileVLCKit
  3. rm -rf ./MobileVLC/External/MobileVLCKit
  4. rm -rf ./MobileVLC/External/MediaLibraryKit

  5. if [ "$1" = "Simulator" ]; then
  6.     pushd vlc
  7.         echo "--==-- Build for vlc (simulator version) --==--"
  8.         pushd extras/package/ios
  9.             ./build_for_iOS.sh Simulator
  10.         popd

  11.         echo "--==-- Build for vlc-MobileVLCKit (simulator version) --==--"
  12.         pushd projects/macosx/framework
  13.             xcodebuild -project MobileVLCKit.xcodeproj -target "Aggregate static plugins" -configuration "Release" -sdk iphonesimulator5.1 SDKROOT=iphonesimulator5.1 VALID_ARCHS=i386 ARCHS=i386 
  14.             xcodebuild -project MobileVLCKit.xcodeproj -target "MobileVLCKit" -configuration "Release" -sdk iphonesimulator5.1 SDKROOT=iphonesimulator5.1 VALID_ARCHS=i386 ARCHS=i386
  15.         popd
  16.     popd

  17.     echo "--==-- Build for MediaLibraryKit (simulator version) --==--"
  18.     pushd MediaLibraryKit
  19.         ln -s ../../vlc/projects/macosx/framework/build/Release-iphonesimulator External/MobileVLCKit
  20.         xcodebuild -project MobileMediaLibraryKit.xcodeproj -configuration "Release" -sdk iphonesimulator5.1 SDKROOT=iphonesimulator5.1 VALID_ARCHS=i386 ARCHS=i386
  21.     popd

  22.     echo "--==-- Build for MobileVLC (simulator version) --==--"
  23.     pushd MobileVLC
  24.         ln -s ../../vlc/projects/macosx/framework/build/Release-iphonesimulator External/MobileVLCKit
  25.         ln -s ../../MediaLibraryKit/build/Release-iphonesimulator External/MediaLibraryKit
  26.         xcodebuild -project MobileVLC.xcodeproj -configuration "Release" -sdk iphonesimulator5.1 SDKROOT=iphonesimulator5.1 VALID_ARCHS=i386 ARCHS=i386
  27.     popd
  28. else
  29.     pushd vlc
  30.         echo "--==-- Build for vlc (os version) --==--"
  31.         pushd extras/package/ios
  32.             ./build_for_iOS.sh
  33.         popd

  34.         echo "--==-- Build for vlc-MobileVLCKit (os version) --==--"
  35.         pushd projects/macosx/framework
  36.             xcodebuild -project MobileVLCKit.xcodeproj -target "Aggregate static plugins" -configuration "Release" -sdk iphoneos5.1 SDKROOT=iphoneos5.1 VALID_ARCHS=armv7 ARCHS=armv7
  37.             xcodebuild -project MobileVLCKit.xcodeproj -target "MobileVLCKit" -configuration "Release" -sdk iphoneos5.1 SDKROOT=iphoneos5.1 VALID_ARCHS=armv7 ARCHS=armv7 
  38.         popd
  39.     popd

  40.     echo "--==-- Build for MediaLibraryKit (os version) --==--"
  41.     pushd MediaLibraryKit
  42.         ln -s ../../vlc/projects/macosx/framework/build/Release-iphoneos External/MobileVLCKit
  43.         xcodebuild -project MobileMediaLibraryKit.xcodeproj -configuration "Release" -sdk iphoneos5.1 SDKROOT=iphoneos5.1 VALID_ARCHS=armv7 ARCHS=armv7 
  44.     popd

  45.     echo "--==-- Build for MobileVLC (os version) --==--"
  46.     pushd MobileVLC
  47.         ln -s ../../vlc/projects/macosx/framework/build/Release-iphoneos External/MobileVLCKit
  48.         ln -s ../../MediaLibraryKit/build/Release-iphoneos External/MediaLibraryKit
  49.         xcodebuild -project MobileVLC.xcodeproj -configuration "Release" -sdk iphoneos5.1 SDKROOT=iphoneos5.1 VALID_ARCHS=armv7 ARCHS=armv7 
  50.     popd

  51. fi

四:
刚才说了build_ios.sh会去调用  vlc/extras/contrib里的bootstrap,所以bootstrap的内容要修改如下,其中mac版本需要根据自己系统mac版本加以修改,如为10.8的请把其中10.7的文本都替换为10.8

点击(此处)折叠或打开

  1. #!/bin/sh 
  2. *************************************************************************** 
  3. # bootstrap : Set up config.mak 
  4. *************************************************************************** 
  5. # Copyright (C) 2003-2009 the VideoLAN team 
  6. # $Id$ 

  7. # Authors: Christophe Massiot <massiot@via.ecp.fr> 
  8. # Derk-Jan Hartman <hartman at videolan dot org> 
  9. # Felix Paul Kühne <fkuehne at videolan dot org> 

  10. # This program is free software; you can redistribute it and/or modify 
  11. # it under the terms of the GNU General Public License as published by 
  12. # the Free Software Foundation; either version 2 of the License, or 
  13. (at your option) any later version. 

  14. # This program is distributed in the hope that it will be useful, 
  15. # but WITHOUT ANY WARRANTY; without even the implied warranty of 
  16. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
  17. # GNU General Public License for more details. 

  18. # You should have received a copy of the GNU General Public License 
  19. # along with this program; if not, write to the Free Software 
  20. # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. 
  21. *************************************************************************** 
  22.   
  23. if test "$#" -gt "2" -o "$1" = "-h" -o "$1" = "--help" ; then 
  24.     echo "Usage: $0 [host [distro]]" >&
  25.     echo " Prepare config.mak file." >&
  26.     exit 1 
  27. fi 
  28.   
  29. LANG=
  30. export LANG 
  31. set -e 
  32. set +
  33.   
  34. BUILD=`gcc -dumpmachine` 
  35. if test "$#" -ge "1"; then 
  36.     HOST="$1" 
  37. else 
  38.     HOST="$BUILD" 
  39. fi 
  40.   
  41. DISTRO= 
  42. if test "$#" = "2"; then 
  43.     echo "Forcing distro.mak to use $2.mak" 
  44.     DISTRO="$2" 
  45.     HOST="$1" 
  46. fi 
  47.   
  48. rm -f config.mak 
  49. { 
  50.     echo "# Automatically generated by bootstrap." 
  51.     echo "# Make changes if you know what you're doing." 
  52. } > config.mak 
  53.   
  54. rm -f distro.mak 
  55. { 
  56.     echo "# Automatically generated by bootstrap" 
  57.     echo "# Make changes if you know what you're doing." 
  58. } > distro.mak 
  59.   
  60. if test "$HOST" != "$BUILD"; then 
  61.     if test -z "$CC"; then 
  62.         CC="${HOST}-gcc" 
  63.     fi 
  64.     if test -z "$CXX"; then 
  65.         CXX="${HOST}-g++" 
  66.     fi 
  67.     if test -z "$LD"; then 
  68.         LD="${HOST}-ld" 
  69.     fi 
  70.     if test -z "$RANLIB"; then 
  71.         RANLIB="${HOST}-ranlib" 
  72.     fi 
  73.     if test -z "$AR"; then 
  74.         AR="${HOST}-ar" 
  75.     fi 
  76.     if test -z "$STRIP"; then 
  77.         STRIP="${HOST}-strip" 
  78.     fi 
  79. fi 
  80.   
  81. case $HOST in 
  82.     *powerpc*|*ppc*) 
  83.          ARCH="ppc" 
  84.      ;; 
  85.     *86_64*) 
  86.           ARCH="x86_64" 
  87.      ;; 
  88.     *86*) 
  89.           ARCH="i386" 
  90.      ;; 
  91.     arm*eabi) 
  92.           ARCH="armel" 
  93.      ;; 
  94.     arm*) 
  95.           ARCH="arm" 
  96.      ;; 
  97. esac 
  98. echo "ARCH = $ARCH" >> config.mak 
  99.   
  100. # Check the HAVE_{OS} 
  101. case $HOST in 
  102.     *darwin*) 
  103.         echo "HAVE_DARWIN_OS = 1" >> config.mak 
  104.         echo "HAVE_BSD = 1" >> config.mak 
  105.     ;; 
  106.     *linux*) 
  107.         echo "HAVE_LINUX = 1" >> config.mak 
  108.     ;; 
  109.     *bsd*) 
  110.         echo "HAVE_BSD = 1" >> config.mak 
  111.     ;; 
  112.     *wince*) 
  113.         echo "HAVE_WINCE = 1" >> config.mak 
  114.     ;; 
  115. esac 
  116.   
  117. case $DISTRO$HOST in 
  118.     ppc-darwin) 
  119.         # Mac OS X < 10.
  120.         echo "Your version of Mac OS X is too old!" >&
  121.         echo "Compiling VLC requires 10.5.x or later" >&
  122.         exit 1 
  123.     ;; 
  124.     *-apple-darwin8) 
  125.         echo "Your version of Mac OS X is too old!" >&
  126.         echo "Compiling and running VLC requires 10.5.x or later" >&
  127.         exit 1 
  128.     ;; 
  129.     powerpc-apple-darwin9) 
  130.         SDK_TARGET=10.
  131.         echo "SDK_TARGET = ${SDK_TARGET}" >> config.mak 
  132.         echo "ENVP = MACOSX_DEPLOYMENT_TARGET=${SDK_TARGET}" >> config.mak 
  133.         echo "MACOSX_SDK = /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk" >> config.mak 
  134.         echo "HAVE_DARWIN_9 = 1" >> config.mak 
  135.         HAVE_DARWIN_9=
  136.         HAVE_DARWIN_32=
  137.         CFLAGS_TUNING=" -arch ppc -mtune=G4" 
  138.         EXTRA_CFLAGS=" -D${ENVP} -isysroot ${MACOSX_SDK} -mmacosx-version-min=${SDK_TARGET}" 
  139.         EXTRA_LDFLAGS=" -arch ppc -isysroot ${MACOSX_SDK} -mmacosx-version-min=${SDK_TARGET} -Wl,-syslibroot,${MACOSX_SDK}" 
  140.         CC="/Applications/Xcode.app/Contents/Developer/usr/bin/gcc-4.2" 
  141.         CXX="/Applications/Xcode.app/Contents/Developer/usr/bin/g++-4.2" 
  142.         LD="ld -arch ppc -syslibroot ${MACOSX_SDK} -mmacosx-version-min=${SDK_TARGET}" 
  143.         echo "PATH = /bin:/usr/bin:/usr/local/bin:" >> config.mak 
  144.         DISTRO=darwin 
  145.         if test -e /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs; then 
  146.             echo "SDKs found. Everything is fine." >&
  147.         else 
  148.             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
  149.             exit 1 
  150.         fi 
  151.     ;; 
  152.     i686-apple-darwin*) 
  153.         echo "Building for $DISTRO" 
  154.         SDK_TARGET=10.
  155.         MIN_LD_VERSION_WITH_TEXT_RELOCATION=81 
  156.         echo "SDK_TARGET = ${SDK_TARGET}" >> config.mak 
  157.         echo "HAVE_DARWIN_OS_ON_INTEL = 1" >> config.mak 
  158.         echo "HAVE_DARWIN_9 = 1" >> config.mak 
  159.         HAVE_DARWIN_9=
  160.         if test `ld -v 2> /dev/stdout | sed -E 's/.*ld64-([0-9]+).*/1/'` -lt ${MIN_LD_VERSION_WITH_TEXT_RELOCATION}; then 
  161.             echo "ERROR: Your ld version is unable to compile VLC.nUpdate to Xcode 3.1 or higher." >&
  162.             exit 1 
  163.         fi 
  164.         echo "ENVP = MACOSX_DEPLOYMENT_TARGET=${SDK_TARGET}" >> config.mak 
  165.         echo "MACOSX_SDK = /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk" >> config.mak 
  166.         HAVE_DARWIN_32=
  167.         CFLAGS_TUNING=" -march=prescott -mtune=generic -arch i386 -m32" 
  168.         EXTRA_CFLAGS=" -D${ENVP} -isysroot ${MACOSX_SDK} -mmacosx-version-min=${SDK_TARGET}" 
  169.         EXTRA_LDFLAGS=" -arch i386 -isysroot ${MACOSX_SDK} -Wl,-syslibroot,${MACOSX_SDK} -mmacosx-version-min=${SDK_TARGET}" 
  170.         CC="/Applications/Xcode.app/Contents/Developer/usr/bin/gcc-4.2" 
  171.         CXX="/Applications/Xcode.app/Contents/Developer/usr/bin/g++-4.2" 
  172.         echo "PATH = /bin:/usr/bin:/usr/local/bin" >> config.mak 
  173.         DISTRO=darwin 
  174.         if test -e /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs; then 
  175.             echo "SDKs found. Everything is fine." >&
  176.         else 
  177.             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
  178.             exit 1 
  179.         fi 
  180.         if test $HOST = "i686-apple-darwin10"; then 
  181.             echo "HAVE_DARWIN_10 = 1" >> config.mak 
  182.         fi 
  183.     ;; 
  184.     x86_64-apple-darwin*) 
  185.         SDK_TARGET=10.
  186.         echo "SDK_TARGET = ${SDK_TARGET}" >> config.mak 
  187.         echo "HAVE_DARWIN_OS_ON_INTEL = 1" >> config.mak 
  188.         echo "HAVE_DARWIN_9 = 1" >> config.mak 
  189.         echo "ENVP = MACOSX_DEPLOYMENT_TARGET=${SDK_TARGET}" >> config.mak 
  190.         echo "MACOSX_SDK = /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX${SDK_TARGET}.sdk" >> config.mak 
  191.         HAVE_DARWIN_64=
  192.         CFLAGS_TUNING=" -march=core2 -mtune=core2 -m64 -arch x86_64" 
  193.         echo "HAVE_DARWIN_64 = 1" >> config.mak 
  194.         EXTRA_CFLAGS=" -D${ENVP} -isysroot ${MACOSX_SDK} -mmacosx-version-min=${SDK_TARGET}" 
  195.         EXTRA_LDFLAGS=" -arch x86_64 -isysroot ${MACOSX_SDK} -Wl,-syslibroot,${MACOSX_SDK} -mmacosx-version-min=${SDK_TARGET}" 
  196.         echo "PATH = /bin:/usr/bin:/usr/local/bin" >> config.mak 
  197.         CC="/Applications/Xcode.app/Contents/Developer/usr/bin/gcc-4.2" 
  198.         CXX="/Applications/Xcode.app/Contents/Developer/usr/bin/g++-4.2" 
  199.         LD="ld" 
  200.         RANLIB="ranlib" 
  201.         AR="ar" 
  202.         STRIP="strip" 
  203.         DISTRO=darwin64 
  204.         if test -e /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs; then 
  205.             echo "SDKs found. Everything is fine." >&
  206.         else 
  207.             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
  208.             exit 1 
  209.         fi 
  210.         if test $HOST = "x86_64-apple-darwin10"; then 
  211.             echo "HAVE_DARWIN_10 = 1" >> config.mak 
  212.         fi 
  213.     ;; 
  214.     *mingw32ce) 
  215.         echo "HAVE_WINCE = 1" >> config.mak 
  216.         echo "PKG_CONFIG_PATH = $(PREFIX)/lib/pkgconfig" >> config.mak 
  217.         EXTRA_CPPFLAGS=" -D_WIN32_WCE=0x0500" 
  218.         DISTRO=wince 
  219.     ;; 
  220.     *64-*mingw*) 
  221.         echo "HAVE_WIN64 = 1" >> config.mak 
  222.         echo "HAVE_WIN32 = 1" >> config.mak 
  223.         echo "PKG_CONFIG_PATH = $(PREFIX)/lib/pkgconfig" >> config.mak 
  224.            EXTRA_CFLAGS="-O3" 
  225.         DISTRO=win64 
  226.     ;; 
  227.     *mingw32*) 
  228.         echo "HAVE_WIN32 = 1" >> config.mak 
  229.         echo "PKG_CONFIG_PATH = $(PREFIX)/lib/pkgconfig" >> config.mak 
  230.         EXTRA_CFLAGS=" -O3 -march=i686 -mtune=generic" 
  231.         DISTRO=win32 
  232.     ;; 
  233.     i686-pc-cygwin) 
  234.         echo "HAVE_WIN32 = 1" >> config.mak 
  235.         echo "HAVE_CYGWIN = 1" >> config.mak 
  236.         CC="gcc -mno-cygwin -isystem /usr/include/mingw" 
  237.         CXX="g++ -mno-cygwin -isystem /usr/include/mingw" 
  238.         HOST=`$CC -dumpmachine` 
  239.         EXTRA_CFLAGS=" -mno-cygwin -isystem /usr/include/mingw" 
  240.         EXTRA_CPPFLAGS=" -mno-cygwin -isystem /usr/include/mingw" 
  241.         EXTRA_LDFLAGS=" -mno-cygwin" 
  242.         echo "PKG_CONFIG_PATH = $(PREFIX)/lib/pkgconfig" >> config.mak 
  243.         DISTRO=win32 
  244.     ;; 
  245.     arm-wince-pe) 
  246.         echo "PKG_CONFIG_PATH = $(PREFIX)/lib/pkgconfig" >> config.mak 
  247.         EXTRA_CPPFLAGS=" -D_WIN32_WCE" 
  248.         DISTRO=wince 
  249.     ;; 
  250.     armeb-linux-uclibc) 
  251.         echo "HAVE_UCLIBC = 1" >> config.mak 
  252.         echo "HAVE_BIGENDIAN = 1" >> config.mak 
  253.         EXTRA_CFLAGS="-Os -march=armv5 -msoft-float" 
  254.     ;; 
  255.     arm-none-linux-gnueabi) 
  256.         if test -f /etc/maemo_version; then 
  257.             DISTRO=maemo 
  258.             echo 'HAVE_MAEMO = 1' >> config.mak 
  259.             EXTRA_CFLAGS=" -mcpu=cortex-a8 -mtune=cortex-a8 -march=armv7-a" 
  260.             EXTRA_CFLAGS="$EXTRA_CFLAGS -mfpu=neon -mfloat-abi=softfp" 
  261.             EXTRA_CFLAGS="$EXTRA_CFLAGS -O3 -fno-tree-vectorize" 
  262.         else 
  263.             EXTRA_CFLAGS="-msoft-float" 
  264.         fi 
  265.     ;; 
  266.     *86_64*linux*) 
  267.         EXTRA_CFLAGS=" -fPIC" 
  268.         EXTRA_CPPFLAGS=" -fPIC" 
  269.         EXTRA_LDFLAGS=" -L/usr/lib64" 
  270.         echo "LIBRARY_PATH = /usr/lib64" >> config.mak 
  271.         echo "PKG_CONFIG_PATH = /usr/lib64/pkgconfig" >> config.mak 
  272.         echo "PKG_CONFIG_LIBDIR = /usr/lib64/pkgconfig" >> config.mak 
  273.     ;; 
  274.     *arm-apple-darwin*) 
  275.         EXTRA_CFLAGS=" -arch armv7" 
  276.         EXTRA_LDFLAGS=" -arch armv7" 
  277.         DISTRO="ios" 
  278.     ;; 
  279. esac 
  280. case "$DISTRO" in 
  281.   ios) 
  282.    echo 'HAVE_IOS = 1' >> config.mak 
  283.    if test -z "$IOS_SDK_ROOT"; then 
  284.      echo "ERROR:nThe bootstrap script requires the IOS_SDK_ROOT environment variable to be set when building for iOS !" 
  285.      exit 1 
  286.    fi 
  287.    EXTRA_CFLAGS+=" $CFLAGS" 
  288.    EXTRA_LDFLAGS+=" $LDFLAGS" 
  289.    EXTRA_CPPFLAGS+=" $CPPFLAGS" 
  290.    EXTRA_CXXFLAGS+=" $CXXFLAGS" 
  291.    echo "IOS_SDK_ROOT = ${IOS_SDK_ROOT}" >> config.mak 
  292.   ;; 
  293. esac 
  294.   
  295. if test -z "${DISTRO}" -a "$HOST" = "$BUILD"; then 
  296.     if test -d "/usr/lib/pkgconfig"; then 
  297.         if test -z "$PKG_CONFIG_PATH"; then 
  298.             echo "PKG_CONFIG_PATH = /usr/lib/pkgconfig" >> config.mak 
  299.         fi 
  300.         if test -z "$PKG_CONFIG_LIBDIR"; then 
  301.             echo "PKG_CONFIG_LIBDIR = /usr/lib/pkgconfig" >> config.mak 
  302.         fi 
  303.     fi 
  304.     # Try to match distribution 
  305.     if test -f /etc/fedora-release; then 
  306.         DISTRO=fedora 
  307.     elif test -f /etc/maemo_version; then 
  308.         DISTRO=maemo 
  309.         echo 'HAVE_MAEMO = 1' >> config.mak 
  310.     elif test -f /etc/debian_version; then 
  311.         # NOTE: check for Debian *after* its derivatives 
  312.         DISTRO=debian 
  313.     fi 
  314. fi 
  315.   
  316. # Default Unix-like systems 
  317. test -z "${DISTRO}" && DISTRO=unix 
  318.   
  319. echo "BUILD = $BUILD" >> config.mak 
  320. echo "HOST = $HOST" >> config.mak 
  321.   
  322. echo "PREFIX = `pwd`/hosts/$HOST/$DISTRO" >> config.mak 
  323.   
  324. mkdir -p hosts/$HOST 
  325. ln -sfn $DISTRO hosts/$HOST/default_distro 
  326.   
  327. if [ "$HOST" = "$BUILD" ]; then 
  328.    ln -sfn hosts/$HOST/$DISTRO build 
  329. fi 
  330.   
  331. echo "CC = ${CC}" >> config.mak 
  332. echo "CXX = ${CXX}" >> config.mak 
  333. echo "LD = ${LD}" >> config.mak 
  334. echo "RANLIB = ${RANLIB}" >> config.mak 
  335. echo "AR = ${AR}" >> config.mak 
  336. echo "STRIP = ${STRIP}" >> config.mak 
  337. echo "EXTRA_CFLAGS = ${CFLAGS_TUNING} ${EXTRA_CFLAGS}" >> config.mak 
  338. echo "EXTRA_CPPFLAGS = ${EXTRA_CPPFLAGS} -isystem $(PREFIX)/include" >> config.mak 
  339. echo "EXTRA_LDFLAGS = ${EXTRA_LDFLAGS}" >> config.mak 
  340. echo "EXTRA_PATH = ${EXTRA_PATH}" >> config.mak 
  341. echo "DISTRO = ${DISTRO}" >> config.mak 
  342.   
  343. #CMAKE 
  344. if test "$HOST" != "$BUILD"; then 
  345. if test ${DISTRO} = "win32"; then 
  346. echo "SET(CMAKE_SYSTEM_NAME Windows)" >> toolchain.cmake 
  347. fi 
  348. echo "SET(CMAKE_C_COMPILER ${CC})" >> toolchain.cmake 
  349. echo "SET(CMAKE_CXX_COMPILER ${CXX})" >> toolchain.cmake 
  350. echo "SET(CMAKE_FIND_ROOT_PATH `pwd` )" >> toolchain.cmake 
  351. echo "set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)" >> toolchain.cmake 
  352. echo "set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)" >> toolchain.cmake 
  353. echo "set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)" >> toolchain.cmake 
  354. fi 
  355.   
  356. if wget --version >/dev/null 2>&1; then 
  357.     echo "WGET = "`which wget`" -c --passive" >> config.mak 
  358. elif test -z `curl --version >/dev/null 2>&1`; then 
  359.     echo "WGET = "`which curl`" -L -O" >> config.mak 
  360. else 
  361.     echo "You need at least wget or curl to fetch the packages." >&
  362.     exit 1 
  363. fi 
  364.   
  365. if svn --version >/dev/null 2>&1; then 
  366.     echo "SVN = "`which svn`"" >> config.mak 
  367. else 
  368.     echo "You do not have a subversion client in your PATH." >&
  369. fi 
  370.   
  371. if git --version>/dev/null 2>&1; then 
  372.     echo "GIT = "`which git`"" >> config.mak 
  373. else 
  374.     echo "You do not have a Git client in your PATH." >&
  375. fi 
  376.   
  377. if test -z "$CONTRIBS_RELEASE"; then 
  378.     echo "EXTRA_CFLAGS += -DNDEBUG" >> config.mak 
  379.     set +
  380.     echo 
  381.     echo "*****************************************************************" 
  382.     echo "* If you need contribs with all debug information, run this *" 
  383.     echo "* line and compile the libraries on your own. *" 
  384.     echo "* CONTRIBS_RELEASE=no ./bootstrap *" 
  385.     echo "*****************************************************************" 
  386. fi 
  387.   
  388. if test $HAVE_DARWIN_9; then 
  389.     set +
  390.     echo 
  391.     echo "*****************************************************************" 
  392.     echo "* We are using GCC-4.2 on OS X, so compilation WILL FAIL if it *" 
  393.     echo "* is NOT installed. *" 
  394.     echo "*****************************************************************" 
  395. fi 
  396.   
  397. if test $HAVE_DARWIN_32; then 
  398.     set +
  399.     echo 
  400.     echo "*****************************************************************" 
  401.     echo "* VLC will be compiled in 32bit mode. *" 
  402.     echo "* *" 
  403.     echo "* Re-run with the x86_64-apple-darwin* argument to turn on *" 
  404.     echo "* 64bit compilation for Intel-based Macs, whereas * is either *" 
  405.     echo "* 9 or 10 depending on your Darwin version. *" 
  406.     echo "* There is NO PPC64 support right now. *" 
  407.     echo "*****************************************************************" 
  408. fi 
  409.   
  410. if test $HAVE_DARWIN_64; then 
  411.     set +
  412.     echo 
  413.     echo "*****************************************************************" 
  414.     echo "* VLC will be compiled in 64bit mode using the 10.5 SDK. *" 
  415.     echo "*****************************************************************" 
  416.     set -x 
  417. fi 
  418.   
  419. case `uname` in 
  420.     Linux) 
  421.         CPUS=`grep -c ^processor /proc/cpuinfo` 
  422.      ;; 
  423.     *) 
  424.         CPUS=1 # default 
  425.      ;; 
  426. esac 
  427. echo "MAKEJOBS = -j$CPUS" >> config.mak 
  428.   
  429. echo 
  430. 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组织,向你们致以崇高的敬意。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值