【问题标题】:Consume FFmpeg XCFramework from Objective-C, headers not found从 Objective-C 使用 FFmpeg XCFramework,找不到标头
【发布时间】:2020-06-28 23:12:24
【问题描述】:

我为 Apple 平台构建了 FFmpeg 作为 XCFramework。我使用https://github.com/kewlbear/FFmpeg-iOS-build-script/pull/147 中的脚本来执行此操作。

我现在正尝试在传统的 iOS/macOS 框架(名为 VideoEditing)中使用该框架,然后在我的 iOS 应用程序中使用该框架(很快将尝试成为 Catalyst)。

VideoEditing 中,我已链接到FFmpeg.xcframework,然后在使用VideoEditing 的应用程序中,我已链接并嵌入FFmpeg.xcframework。以前我将 FFmpeg 构建为标准静态库,并在 Objective-C++ 包装器中使用 VideoEditing 内部的它,这样我就可以从 Swift 中使用它。

在那个 Objective-C++ 文件中,我会导入像 #import <libswscale/swscale.h> 这样的 FFmpeg 头文件。为了完成这项工作,我必须设置头文件搜索路径。转换为 XCFramework 后应该怎么做?我试过@import FFmpeg#import <FFmpeg/libswscale/swscale.h>#import <FFmpeg/swscale.h> 以及#import <libswscale/swscale.h>。在每种情况下,我都会在import 行上收到file not found 错误。

Apple 的所有示例都仅在 Swift 中展示它,并带有出售模块的框架。如果我仍然尝试设置标头搜索路径,那么您现在每个架构都有不同的标头。

【问题讨论】:

  • 我遇到了同样的问题,但使用的是 Firebase/Crashlytics SDK 的 6.28.2 版本。所以这个问题不仅限于FFmpeg。

标签: objective-c xcode ffmpeg linker-errors xcframework


【解决方案1】:

尝试@import FFmpeg 并在构建设置中将Enable Modules (C and Objective C) 设置为YES。确保 Link Frameworks Automatically 设置为 YES

【讨论】:

  • 我已经尝试了@import FFmpeg,并且我启用了Enable Modules (C and Objective C)。在这种情况下它不起作用,因为FFmpeg框架与“普通”框架不同,所以它不构建模块,所以没有模块可以导入。
【解决方案2】:

您需要将头文件与 xcframework 并行放置,并为该头文件设置头文件搜索路径。 xcframework 就像一个单独的 .a 文件,Xcode 不会在 xcframework 中搜索头文件。

【讨论】:

    猜你喜欢
    • 2019-03-13
    • 1970-01-01
    • 1970-01-01
    • 2020-03-24
    • 2016-10-30
    • 2022-11-21
    • 2021-12-12
    • 2020-09-26
    • 2021-02-13
    相关资源
    最近更新 更多