我的应用程序(iOS 7 +,Xcode 6)使用CocoaPods作为其依赖项。其中一个依赖项是FFmpeg。
当我构建我的应用程序时,我得到了几个类似的问题,如
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c ++ / V1 /的ctime:60:9: 没有名为' clock'在全局命名空间中;你是说' flock'?
我了解到这是因为FFmpeg在time.h
子文件夹中包含libavutil
文件。这个time.h
隐藏了编译器中的系统time.h
,从而隐藏了错误。
我尝试手动将FFmpeg的time.h重命名为其他内容,这有助于。现在,我希望自动完成这项工作,以便在接下来的“pod update”中继续存在。
我尝试将libavutil添加到Sub-Directories to Exclude In Recursive Searches
,但这根本没有帮助。
我试图删除" $ {PODS_ROOT} / Headers / Public / FFmpeg / libavutil"来自Header Search Paths
并且它也没有帮助。
我知道可以在他的Podfile中使用prepare_command
和post_install
个钩子但不幸的是我不知道这些钩子是否对我有用。
那么,如何从头部搜索路径中排除FFmpeg pod的libavutil中的time.h(我不介意重命名甚至删除time.h)?
答案 0 :(得分:5)
对于与ffmpeg time.h
有同样问题的人:
您可以搜索系统的time.h
并将其手动包含在ffmpeg' time.h
中:
打开ffmpeg' time.h
(在libavutil
中)并在开头插入#include </usr/include/time.h>
。
当然,这只是一种懒惰的解决方法,但它是一种简单的方法,可以包含time.h
个标题。
答案 1 :(得分:0)
我会建议另一种解决方案,因为提供的解决方案对我来说并不完全有效。什么对我有用:
#include <time.h>
我认为这是一个更可靠和更有弹性的解决方案,即使它需要对 ffmpeg 的标头进行更多更改。将针对多个项目测试此解决方案。
干杯,特奥
答案 2 :(得分:0)
如果您不使用此文件中的函数,例如:av_gettime、av_gettime_relative、av_gettime_relative_is_monotonic、av_usleep,您可以从 time.h
中 pod 的公共标头中排除 FFmpeg 的 Podfile
。< /p>
Podfile:
target 'YourApp' do
project 'YourApp'
...
pod 'FFmpeg', '= 2.8.3'
end
pre_install do |installer|
installer.pod_targets.each do |pod|
# FFmpeg: Fix with <time.h>
if pod.name == 'FFmpeg'
pod.file_accessors.each do |fa|
fa.spec.exclude_files = 'ffmpeg-ios-static-libs/include/**/time.h'
end
end
end
end