gpt4 book ai didi

ios - 模块映射文件中是否需要 "link framework"行?

转载 作者:行者123 更新时间:2023-12-01 16:13:38 26 4
gpt4 key购买 nike

一些框架文件带有 module.modulemap包含“链接框架”行。例如这里是Intercom's module.modulemap file的当前内容:

framework module Intercom {
umbrella header "Intercom.h"

[...]

link framework "Foundation"
link framework "UIKit"
link framework "Accelerate"
[...]
}

我想知道为什么 link framework行是必需的,所以我尝试在 Xcode 10.2 上为框架目标创建一个新项目,但无论我做什么,它似乎都是 module.modulemap文件将简单地保持不变(这是可以理解的,似乎该文件是要手动修改的)。

我想知道的是,为什么这首先是必要的? blame info + corresponding release notes似乎建议添加所述行以解决动态框架和重复符号的问题,但仅此而已。

最佳答案

有两种方法可以让 Objective-C 框架在 swift 项目中可用:

1) 让 Xcode 自动创建 module.modulemap文件,这是您启动新框架项目时的默认选项:

Defines Module option

因此,当您编译项目时,将使用默认配置生成此文件:

framework module MODULE_NAME {
umbrella header "MODULE_NAME-umbrella.h"

export *
module * { export * }
}

通常对于大多数项目来说已经足够了。

2) 手动生成文件,这是您的项目案例。

根据 CLANG's modulemap documentation :

A link-declaration specifies a library or framework against which a program should be linked if the enclosing module is imported in any translation unit in that program.



模块映射中的链接声明旨在提示工具链包含模块代码的实际二进制文件是什么。如果没有这个明确的定义,在主项目中导入框架可能会由于需要这些源框架而导致错误,主要是 no such module error .

因此,如果您有一个具有动态框架依赖项的 swift 项目,并且其中一个具有与您的示例框架相同的依赖项列表,如果您从 .modulemap 中删除显式声明文件,您可能会看到 duplicate symbols错误。

更多信息,我推荐 this Apple thread回复。

关于ios - 模块映射文件中是否需要 "link framework"行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58235025/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com