Mac OS上编译Mobile VLC for ios

来源:互联网 发布:mac看不了群相册 编辑:程序博客网 时间:2024/05/22 14:30

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


























 

 

 

阅读(3031) | 评论(3) | 转发(2) |
0

上一篇:Linux下编译VLC for Android源代码总结

下一篇:VLC播放RTSP视频延迟问题

相关热门文章
  • 如何给QQ邮箱开通微信提醒...
  • 如何互导iPhone和其他手机中的...
  • IOS如何打包成ipa文件
  • 将iphone手机中的数据导入三星...
  • Mac OS上编译Mobile VLC for i...
  • socket编程开启混杂模式的目的...
  • C++ 嵌套类是干什么的?...
  • C++ 单例怎么写?
  • sizeof 这个操作符都有什么特...
  • Oracle VM server 如何删除vm ...
给主人留下些什么吧!~~
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小孩挖耳朵疼了怎么办 挖耳朵挖破了怎么办 挖耳朵皮挖破了耳鸣怎么办 北京自考证丢啦怎么办 不服检察院的答复函该怎么办 检察院控申答复函不复怎么办 在看守所里疯了怎么办 第一次吸毒拘留五天第二次会怎么办 被派出所拘留15天怎么办 老公从拘留所出来聪明老婆怎么办 中信信用卡忘记还款了怎么办 监狱的犯人病了怎么办 判缓期间在行政拘留怎么办 法院拘留15天工作怎么办 高血压签定了无期限合同怎么办 法院司法拘留找不到人怎么办 c1骑摩托车要拘留怎么办 欠钱的找不到人怎么办 治安拘留人跑了怎么办 行政拘留拘留所不收应该怎么办 在看守所被打了怎么办 取保候审超过12个月怎么办 拘留20天还没有判刑怎么办 被打了没有证据怎么办 拘留37天后没有放人怎么办 强制执行执行的财产不够怎么办 收到公安局拘留通知家属应该怎么办 对方不出谅解书怎么办 寻衅滋事没抓的 怎么办 公务员政审父母拘留过怎么办 我参与了网赌怎么办 亲人出车祸去世家属怎么办 车牌换了原保险怎么办 北京车牌夫妻变更车险怎么办 赌博拘留15天不交罚款怎么办 给人打了不赔钱怎么办 打了人对方讹钱怎么办 换车了原来的etc怎么办 换异地车牌了etc怎么办 被执行人拘留15天后不还钱怎么办 被执行人拘留后还是不还钱怎么办