我正在尝试在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中提供正确的参数吗?
提前致谢
答案 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'
希望这有帮助。