没有名为' clock'在使用FFmpeg pod

时间:2015-07-07 13:23:04

标签: ios xcode ffmpeg cocoapods

我的应用程序(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_commandpost_install个钩子但不幸的是我不知道这些钩子是否对我有用。

那么,如何从头部搜索路径中排除FFmpeg pod的libavutil中的time.h(我不介意重命名甚至删除time.h)?

3 个答案:

答案 0 :(得分:5)

对于与ffmpeg time.h有同样问题的人:

您可以搜索系统的time.h并将其手动包含在ffmpeg' time.h中:

打开ffmpeg&#39; time.h(在libavutil中)并在开头插入#include </usr/include/time.h>

当然,这只是一种懒惰的解决方法,但它是一种简单的方法,可以包含time.h个标题。

答案 1 :(得分:0)

我会建议另一种解决方案,因为提供的解决方案对我来说并不完全有效。什么对我有用:

  1. 将 libavutil/time.h 重命名为 libavutil/fftime.h
  2. 在此文件中添加一行(靠近其他包含)#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