在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'
希望这可以帮助。