问题标签 [module-map]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
247 浏览

swift - #include 来自模块化项目头文件的系统头文件给出“在框架模块中包含非模块化头文件...”错误

我正在尝试将 libarchive 嵌入到我正在构建的基于 Swift 的框架中。

我创建了一个模块映射以私下包含(接近末尾的archive.h内部模块)libarchive

在内部archive.h,以下行导致错误:

我不明白为什么这个包含没有被映射到我的 SDK 中正确的 inttypes 模块。

我的 SDK 中定义了一个模块 Darwin.C.inttypes,在这里:

有人能告诉我如何让#includeinarchive.h映射到声明的模块吗?

0 投票
1 回答
11413 浏览

ios - Swift 项目:导入模块化框架时“缺少必需的模块”

设置

  1. 我创建了一个快速框架,其中包括 C 库(CommonCrypto)和一个 Objective C 文件。

  2. swift项目中没有桥头堡。所以我创建了一个module.modulemap将 CommonCrypto 和 Objective-C 文件导入到我的 swift 框架中。

    module.modulemap 内容: 在此处输入图像描述

这是 module.modulemap 示例链接:在 swift 框架中导入 CommonCrypto

  1. 在项目设置中,添加modules.modulusmap路径来快速编译在此处输入图像描述

    因此,在我的 swift 框架中,一切正常。我可以像这样使用模数

    在此处输入图像描述

问题展示

  1. 归档模块化框架并作为构建产品导出。

  2. 在我的 swift 示例项目中,将模块化框架添加到 Embedded Binaries 在此处输入图像描述

  3. 当我在框架内使用某些东西时,此行发生错误 在此处输入图像描述

我尝试了很多解决方案,但仍然无法正常工作。

类似的问题:

  1. Swift 应用程序:导入静态库的框架时“缺少必需的模块”

  2. 将 RealmSwift 添加为子项目:缺少必需的模块:'Realm.Private'、'Realm'

有人对此有很好的解决方案吗?谢谢!!

0 投票
0 回答
3040 浏览

ios - 导入 Swift 框架时出现“无法加载底层模块”错误

我在 Swift 2.3 中编写了一个框架,它使用 Cocoapods 来利用一些 Objective-C 项目,例如 AFNetworking 和 CocoaLumberjack。由于桥接头不能在框架中使用,我为每个 Objective-C 项目(以及我编写的一些 Objective-C 实用程序)定义了模块映射。例如,AFNetworkModule 的 module.modulemap 如下所示:

还在 Build Settings -> Import Paths 中添加了模块映射的路径。这样我可以在我的框架 swift 代码中导入模块:

在框架的构建设置中,设置定义模块设置为是。

import MyFramework 在外部,当框架和示例应用程序位于同一工作区时,我可以在示例 Swift 应用程序中使用该框架而不会出现任何问题:

但是当我尝试在单独的 Swift 项目中导入框架时,我得到“无法为 MyFramework 加载底层模块”。生成的框架包含一个 Headers 文件夹,其中包含 MyFramework-Swift.h 和 MyFramework.h(伞形文件)。我没有在伞形文件中添加任何标题,因为我正在使用模块在 swift 框架中内部导入 Objective-c。

0 投票
0 回答
914 浏览

swift - SwiftPM:如何设置 Swift module.map 引用两个连接的 C 库

我正在尝试构建一个 Swift 包管理器系统包(一个 module.modulemap),使两个系统 C 库可用,其中一个包含另一个。

也就是说,一个(比如 libcurl)是一个基本模块,另一个 C 库包含它(就像这样:)#include "libcurl.h"。在常规的 C 端,这是可行的,因为 makefile 传递了正确的-I标志并且一切都很好(我大概可以在 SPM 中做同样的事情,但我想避免给 SPM 额外的标志)。

所以我想出的是这个模块图:

CBase在一个运行良好的 Swift 包中导入。但是当我尝试 importCMyLib时,编译器会抱怨:

这是可以理解的,因为编译器不知道在哪里看(尽管我认为这use CBase会有所帮助)。

有没有办法让它工作而不必-Xcc -I在构建过程中添加标志?

更新 1:在某种程度上,这在 Swift SR-145SE-0063: SwiftPM System Module Search Paths中有所涉及。建议使用 Package.swiftpkgConfig设置。这似乎适用于我的特定设置。但是,如果没有.pc文件,那就是鸡和蛋。我尝试在包中嵌入一个自己的.pc文件,但系统包目录未添加到PKG_CONFIG_PATH(因此在编译依赖模块期间不会考虑)。所以问题是:如何在安装了库但没有 oa.pc文件(只有头文件和库)的环境中实现这一点。

0 投票
0 回答
1041 浏览

ios - Swift 框架中缺少必需的模块

我用两个 Objective-C 类构建了一个 swift 框架。在我发布一个框架后,它可以在我的环境中运行。但是我将它导入到另一个环境,但它不起作用。“缺少需要模块......”这是我的模块。

我尝试了很多解决方案,但都失败了。谁能帮我?谢谢。

0 投票
1 回答
632 浏览

swift - 我可以在 module.modulemap 中使用环境变量或波浪号吗?

我的module.modulemap文件如下所示:

但是,我收到此错误:

当我使用不带波浪号的绝对路径时,它编译得很好,但是由于这将像这样分发给所有开发人员,我想使用波浪号。有什么方法可以使这项工作正常进行吗?


我还尝试在header字符串中使用环境变量,但这也不起作用:

0 投票
0 回答
459 浏览

swift - 是否可以在模块映射中使用系统范围的标头?

我想将 OpenSSL 绑定到我的 Swift 客户端代码。我现在使用的是模块映射中引用的伞头:

copenssl.h位于同一个目录中,它只是一系列包含,例如#include <openssl/conf.h>. 使用所有需要的编译器标志,它可以完美地工作:我可以从中导入COpenSSL和使用符号。

但是,我担心我的代码中存在另一个级别的间接性。我怀疑这是否真的有必要。如果我放下伞头,copenssl.h然后将包含内容粘贴到模块映射中,如下所示:

然后它不再能找到标题,即使所有的标志都是一样的。感觉编译器只搜索模块映射目录,不尊重项目的搜索路径设置。

文档说:

该文件可以通过绝对路径或相对于当前地图文件的路径来引用。

http://clang.llvm.org/docs/Modules.html#module-declaration

但我对硬编码路径犹豫不决,因为它阻碍了跨平台性。

我应该只使用伞头,还是有什么方法可以让编译器查看-I路径?

0 投票
0 回答
739 浏览

ios - 无法在 Swift 动态框架中加载模块映射

我正在开发一个 Swift 动态框架,其中包含一些 Objective-C 代码。我需要使用一些遗留的 Objective-C 代码而不将代码暴露给它。我开始知道我可以使用模块映射来避免在框架中将标题添加为公共。我一直在使用这个关于如何创建模块映射的链接。我创建的模块图看起来像这样。

之后,我尝试在 Swift 文件中导入模块,但没有自动完成。无论如何,我写了模块名称并尝试构建它。我在 Swift 文件中遇到错误,提示“无法构建 Objective-C 模块”。在模块映射文件中,我看到错误为“无法找到标头”。这是错误

在此处输入图像描述

所以我尝试添加构建设置的$(SRCROOT)/ProjectName/路径Include Path。之后它无法找到伞头。

在此处输入图像描述

我搜索了 StackOverflow 和 Google 的大部分内容,但找不到任何对我有帮助的东西。这是我第一次使用模块映射,我被困在这里不知道如何进一步解决这个问题。如果有人能指出我错过了什么,或者你能建议一些其他可以帮助我的资源,那就太好了。谢谢!

0 投票
1 回答
18959 浏览

swift - 如何在 Swift 中使用静态库和模块映射文件?

我正在尝试在我的 Swift 项目中包含一个 3rd 方静态库。我有这两个文件,以及其他一些文件。

GoogleConversionTrackingSDK/ACTReporter.h GoogleConversionTrackingSDK/libGoogleConversionTracking.a

我将.a文件添加到目标的“链接框架和库”部分。然后我在我的项目中创建了一个module.map文件,如下所示:

在 Swift 文件中,我现在可以参考它:

但我在链接时收到错误:

ld:找不到 -lGoogleConversionTracking 的库
clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
注意:找不到 -lGoogleConversionTracking 的库

你如何解决这个问题?如果可能,我不想使用桥接头,而是使用这些模块定义文件。

0 投票
2 回答
1379 浏览

objective-c - Modulemap 中标头的相对路径

目前我正在尝试优化我的模块图。问题是我无法将我的框架添加到我的项目中,因为我在我的 swift 框架中使用了 obj-c 框架。我在我的模块映射中添加了 Obc-c 标头并使模块工作,并且可以成功地将我的框架添加到我的项目中。问题是我不能让它与我的标题的真实路径一起工作。并且使用绝对路径只是一种临时解决方案,对同事不友好。

不是我必须设置这种绝对路径:

我在我的框架项目中添加了这个模块映射作为私有模块映射。我的这项工作有什么选择吗?

提前致谢。