在iOS5.1中,ffmpeg不会./configure

我试图在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. 

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

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

提前致谢

由于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值。

老答复

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

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

 ./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文件。

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

 --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 

请注意,你正在使用arm-apple-darwin10-gcc-4.2.1版本的apple自己的gcc。 由于这仅是一个示例,请查看您的../Developer/../bin/并使用您../Developer/../bin/的最新arm-apple-darwin10-gcc-xxx 。 我看到有很多答案在SO上建议你按照你的方式做到这一点,这是完全错误的! 并且不适用于arm,它仅适用于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' 

另外,不要在--extra-cflags放置-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' 

希望这可以帮助。