ffmpeg赢得了iOS5.1中的./configure

时间:2012-04-02 19:23:53

标签: iphone c ios ffmpeg

我正在尝试在iOS5.1(armv7)上构建ffmpeg,当我尝试运行./configure时这样:

./configure --disable-doc --disable-ffmpeg --disable-ffplay --disable-ffserver
   --enable-cross-compile --arch=arm --target-os=darwin
   --cc=/applications/xcode.app/contents/Developer/usr/bin/gcc
   --as='gas-preprocessor/gas-preprocessor.pl /applications/xcode.app/contents/Developer/usr/bin/gcc'
   --sysroot=/applications/xcode.app/contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk
   --cpu=cortex-a8 --extra-cflags='-arch armv7'
   --extra-ldflags='-arch armv7 -isysroot /applications/xcode.app/contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk'
   --enable-pic

我收到以下错误:

/applications/xcode.app/contents/Developer/usr/bin/gcc
is unable to create an executable file.
C compiler test failed.
  

如果您认为配置有误,请确保您使用的是最新版本   SVN的版本。如果最新版本失败,请将问题报告给   ffmpeg-user@mplayerhq.hu邮件列表或irc.freenode.net上的IRC #ffmpeg。   包括configure生成的日志文件“config.err”,因为这会有所帮助   解决问题。

有人可以在iOS5.1中提供正确的参数吗?

提前致谢

2 个答案:

答案 0 :(得分:4)

说明已更改,因为xcode SDK中不再有gcc

你需要做的是指定cc是使用xcrun的iphoneos编译器,所以我们之前只是将路径放到gcc,我们现在要对xcrun进行引用clang

我从git下载了最新的ffmpeg,确保路径上有gas-preprocess.pl的副本,然后将--cc=行更改为:

--cc='xcrun -sdk iphoneos clang -mios-version-min=5.1'

(这假设您正在构建并仍然以ios 5.1为目标 - 如果您的目标是更新,那么您将值更改为较新的版本。我为我指定了7.0,但我也使用iOS 8.4 SDK,所以配置行看起来像:

./configure --disable-doc --disable-ffmpeg --disable-ffplay --disable-ffserver \
 --enable-cross-compile --arch=arm --target-os=darwin \
 --cc='xcrun -sdk iphoneos clang -mios-version-min=7.0' \
 --sysroot=/applications/xcode.app/contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.4.sdk \
 --cpu=cortex-a8 --extra-cflags='-arch armv7' \
 --extra-ldflags='-arch armv7 -isysroot /applications/xcode.app/contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.4.sdk' \
 --enable-pic

从ios8.4 SDK构建ffmpeg。这些说明应该继续有效;您只需要为较新的SDK替换相应的7.0 / 8.4值。

OLD ANSWER

当您尝试使用MacOS版本的编译器编译iOS代码时会发生这种情况。

您需要使用以下命令指定iPhone的iPhone版本:

./configure --disable-doc --disable-ffmpeg --disable-ffplay --disable-ffserver
   --enable-cross-compile --arch=arm --target-os=darwin
   --cc=/applications/xcode.app/contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc
   --as='gas-preprocessor/gas-preprocessor.pl /applications/xcode.app/contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc'
   --sysroot=/applications/xcode.app/contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk
   --cpu=cortex-a8 --extra-cflags='-arch armv7'
   --extra-ldflags='-arch armv7
   -isysroot /applications/xcode.app/contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk'
   --enable-pic

尝试使用configure调试问题时,第一步是查看作为运行一部分生成的config.log文件。

答案 1 :(得分:1)

我的配置脚本有一些问题,我可以说。首先,您正在使用:

--cc=/applications/xcode.app/contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc 

这是错误的。您应该使用特定于体系结构的gcc编译器,因此在您的情况下(armv7)您应该使用,例如:

--cc=/applications/xcode.app/contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-gcc-4.2.1

请注意,您正在调用Apple自己的gcc的arm-apple-darwin10-gcc-4.2.1版本。 由于这只是一个示例,请查看../Developer/../bin/并使用您拥有的最新arm-apple-darwin10-gcc-x.x.x。我看到有很多答案在SO上表明你按照你的方式做到这一点,这是完全错误的!并且不适用于手臂,它仅适用于i386(模拟器)。

您需要更新汇编程序指令以反映使用相同的gcc版本:

--as='gas-preprocessor/gas-preprocessor.pl /applications/xcode.app/contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-gcc-4.2.1'

此外,请勿在{{1​​}}中添加-arch armv7,否则您可能会获得--extra-cflags error: unrecognized command line option "-arch"

最后,根据您的情况,除了您已经拥有的内容之外,我可以建议以下内容:

--disable-bzlib --disable-gpl --disable-shared --enable-static --disable-mmx --disable-debug --disable-neon

并改为:

--extra-cflags='-pipe -Os -gdwarf-2 -isysroot /applications/xcode.app/contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk -m${thumb_opt:-no-thumb} -mthumb-interwork'

希望这有帮助。