基于iOS5.0的MobileVLC(vlc for iOS)编译 -- 含FFMpeg库的编译解决办法

今天是2013年7月20日,很高兴宣布这篇文章已经完成其历史任务,并在这段时间通过这篇文章和不少同学有了交流。因为官方不光重新在app store上架了新版的VLC,并且官网(http://www.videolan.org/vlc/download-ios.html)也更新至2.0.x。

作者暂时没有时间去研究2.0版本,希望2.0版本以及后续版本一切安好~


上篇文章:《黑苹果,iOS SDK和MobileVLC之逆旅(二) 编译MobileVLC》(http://blog.csdn.net/madongchunqiu/article/details/6707068)发出之后,陆续和不少同学们有些交流。但那毕竟只是我入门iOS平台的学习之作,故不少问题也没能帮到大家。

近来工作有了阶段性成果,可以放松一下,而且手头上面的东西也和自制VLC有那么点沾边,正巧某同学提到iOS SDK5.0上面的编译环境似乎有了不少变化,我的老文章已经无法适应新环境了,所以花了点时间,终于把这个问题搞定了。

半夜三更还在敲键盘,的确有那么点啥。不过我是怕现在不写下来明天起床就忘记了~老了就这样。

下面开始。



一。编译环境:(Development Environment)

硬件平台:MBA

软件系统:Mac OS X Lion 10.7.3

开发环境:Xcode 4.2, iOS SDK 5.0

【注:开发环境不是最新的,是因为我手头的项目在那,怕升级后又要花时间调,想等到项目结尾再升到最新。】

【补注:据称,升级到Xcode4.3和iOS SDK5.1之后,开发环境最大的区别是SDK的目录由

/Developer/Platform/xxx

变成了

/Applications/Xcode.app/Contents/Developer/Platform/xxx

那么对于MobileVLC1.1.0版本而言,首先要做的,就是在源代码中,全局搜索/Developer/Platform/xxx,然后对其进行替换。或者把新目录中的东西再拷贝一份到老目录也行(似乎有些帖子就这么做的),但是考虑到既然Apple下决心换目录了,死抓着老的目录结构也没有必要。】

【补注的注:在bootstrap脚本中,会去查找/Developer/SDKs这个目录,也需要相应的修改】


二。编译的整体说明:(Overview)

总体来说,编译iOS5.0和iOS4.2的区别,在于几个编译器的“名字”变了,比如gcc-4.2和g++-4.2,在新的开发环境目录下都成了llvm-gcc-4.2或llvm-g++-4.2。据称是因为iOS SDK全面放弃使用GNU GCC的缘故。具体原因我也未查找更多资料,不过想来就是因为这些改变,所以才带来了更多的未可知变化。


就细节来说:编译simulator版本的MobileVLC和iOS Target版本的MobileVLC现在不能用同一个脚本了。别问我为什么会这样,我也很迷糊。如下所述

 - Simulator版本的更改:

 --->1. SDK版本号由3.2升级至5.0 【同iOS SDK4.2的编译修改】

 --->2. 编译选项彻底区分simulator版本和iOS target版本【同iOS SDK4.2的编译修改】

 --->3. 编译器名称改成:"cpp-4.2 -> llvm-cpp-4.2", "gcc-4.2 ->clang", "g++-4.2 ->llvm-g++-4.2" 【注:这里用llvm-gcc-4.2编译失败后,再改用clang成功的。原因未深究。有人说iOS SDK5.1的Simulator版本编译器目录下没有clang,这点我不甚明了。反正我iOS SDK5.0的Simulator版本编译器目录下是有clang的】


 - iOS target版本的更改

 --->1. SDK版本号由3.2升级至5.0 【同iOS SDK4.2的编译修改】

 --->2. 编译选项彻底区分simulator版本和iOS target版本【同iOS SDK4.2的编译修改】

 --->3. 编译器名称改成:"cpp-4.2 -> llvm-cpp-4.2", "gcc-4.2 ->llvm-gcc-4.2", "g++-4.2 -> llvm-g++-4.2" 【注:这里均使用llvm版本的编译器。请比较和Simulator版本的不同,此处使用clang反而会编译错误,原因未深究】

 --->4. 链接目录参数加入:-L${IOS_SDK_ROOT}/usr/lib/system

 --->5. 更改生成ffmpeg config的makefile,加入--disable-asm参数,原因后面详述

 --->6. 为了编译libdvbpsi库,稍稍修改iOS SDK的源文件,在/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/usr/include中拷贝入两个新文件limits.h,原因后面详述。

下面一步步演示如何完成任务。


三。调试版本的修改过程:(Step by step for simulator version)


3.1 将MobileVLC 1.1.0的源代码(http://www.videolan.org/vlc/download-ios.html)下载到本地

3.2 创建目录(比如/VLC),并将3个源代码包解压在目录内,并依次重命名为:MediaLibraryKit, MobileVLC, vlc


3.3 修改MobileVLCKit(即libVLC for iOS)的脚本文件(/VLC/vlc/extras/package/ios/build_for_iOS.sh),因为有几处改动,所以不如直接拷贝我这个版本好了。【注:2处改动,一个是iOS 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="/Developer/Platforms/iPhone${PLATFORM}.platform/Developer"
IOS_SDK_ROOT="${DEVROOT}/SDKs/iPhone${PLATFORM}5.0.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=3.2 ${OPTIM}"
export OBJCFLAGS="${CFLAGS}"
if [ "$PLATFORM" = "Simulator" ]; then
    # Use the new ABI on simulator, else we can't build
    
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 95
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 95
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值