问题标签 [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.
swift - #include 来自模块化项目头文件的系统头文件给出“在框架模块中包含非模块化头文件...”错误
我正在尝试将 libarchive 嵌入到我正在构建的基于 Swift 的框架中。
我创建了一个模块映射以私下包含(接近末尾的archive.h
内部模块)libarchive
在内部archive.h
,以下行导致错误:
我不明白为什么这个包含没有被映射到我的 SDK 中正确的 inttypes 模块。
我的 SDK 中定义了一个模块 Darwin.C.inttypes,在这里:
有人能告诉我如何让#include
inarchive.h
映射到声明的模块吗?
ios - Swift 项目:导入模块化框架时“缺少必需的模块”
设置
我创建了一个快速框架,其中包括 C 库(CommonCrypto)和一个 Objective C 文件。
swift项目中没有桥头堡。所以我创建了一个
module.modulemap
将 CommonCrypto 和 Objective-C 文件导入到我的 swift 框架中。
这是 module.modulemap 示例链接:在 swift 框架中导入 CommonCrypto
问题展示
我尝试了很多解决方案,但仍然无法正常工作。
类似的问题:
有人对此有很好的解决方案吗?谢谢!!
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。
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-145
和
SE-0063: SwiftPM System Module Search Paths中有所涉及。建议使用 Package.swiftpkgConfig
设置。这似乎适用于我的特定设置。但是,如果没有.pc
文件,那就是鸡和蛋。我尝试在包中嵌入一个自己的.pc
文件,但系统包目录未添加到PKG_CONFIG_PATH
(因此在编译依赖模块期间不会考虑)。所以问题是:如何在安装了库但没有 oa.pc
文件(只有头文件和库)的环境中实现这一点。
ios - Swift 框架中缺少必需的模块
我用两个 Objective-C 类构建了一个 swift 框架。在我发布一个框架后,它可以在我的环境中运行。但是我将它导入到另一个环境,但它不起作用。“缺少需要模块......”这是我的模块。
我尝试了很多解决方案,但都失败了。谁能帮我?谢谢。
swift - 我可以在 module.modulemap 中使用环境变量或波浪号吗?
我的module.modulemap
文件如下所示:
但是,我收到此错误:
当我使用不带波浪号的绝对路径时,它编译得很好,但是由于这将像这样分发给所有开发人员,我想使用波浪号。有什么方法可以使这项工作正常进行吗?
我还尝试在header
字符串中使用环境变量,但这也不起作用:
swift - 是否可以在模块映射中使用系统范围的标头?
我想将 OpenSSL 绑定到我的 Swift 客户端代码。我现在使用的是模块映射中引用的伞头:
它copenssl.h
位于同一个目录中,它只是一系列包含,例如#include <openssl/conf.h>
. 使用所有需要的编译器标志,它可以完美地工作:我可以从中导入COpenSSL
和使用符号。
但是,我担心我的代码中存在另一个级别的间接性。我怀疑这是否真的有必要。如果我放下伞头,copenssl.h
然后将包含内容粘贴到模块映射中,如下所示:
然后它不再能找到标题,即使所有的标志都是一样的。感觉编译器只搜索模块映射目录,不尊重项目的搜索路径设置。
文档说:
该文件可以通过绝对路径或相对于当前地图文件的路径来引用。
— http://clang.llvm.org/docs/Modules.html#module-declaration
但我对硬编码路径犹豫不决,因为它阻碍了跨平台性。
我应该只使用伞头,还是有什么方法可以让编译器查看-I
路径?
ios - 无法在 Swift 动态框架中加载模块映射
我正在开发一个 Swift 动态框架,其中包含一些 Objective-C 代码。我需要使用一些遗留的 Objective-C 代码而不将代码暴露给它。我开始知道我可以使用模块映射来避免在框架中将标题添加为公共。我一直在使用这个关于如何创建模块映射的链接。我创建的模块图看起来像这样。
之后,我尝试在 Swift 文件中导入模块,但没有自动完成。无论如何,我写了模块名称并尝试构建它。我在 Swift 文件中遇到错误,提示“无法构建 Objective-C 模块”。在模块映射文件中,我看到错误为“无法找到标头”。这是错误
所以我尝试添加构建设置的$(SRCROOT)/ProjectName/
路径Include Path
。之后它无法找到伞头。
我搜索了 StackOverflow 和 Google 的大部分内容,但找不到任何对我有帮助的东西。这是我第一次使用模块映射,我被困在这里不知道如何进一步解决这个问题。如果有人能指出我错过了什么,或者你能建议一些其他可以帮助我的资源,那就太好了。谢谢!
swift - 如何在 Swift 中使用静态库和模块映射文件?
我正在尝试在我的 Swift 项目中包含一个 3rd 方静态库。我有这两个文件,以及其他一些文件。
GoogleConversionTrackingSDK/ACTReporter.h GoogleConversionTrackingSDK/libGoogleConversionTracking.a
我将.a
文件添加到目标的“链接框架和库”部分。然后我在我的项目中创建了一个module.map
文件,如下所示:
在 Swift 文件中,我现在可以参考它:
但我在链接时收到错误:
ld:找不到 -lGoogleConversionTracking 的库
clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
注意:找不到 -lGoogleConversionTracking 的库
你如何解决这个问题?如果可能,我不想使用桥接头,而是使用这些模块定义文件。
objective-c - Modulemap 中标头的相对路径
目前我正在尝试优化我的模块图。问题是我无法将我的框架添加到我的项目中,因为我在我的 swift 框架中使用了 obj-c 框架。我在我的模块映射中添加了 Obc-c 标头并使模块工作,并且可以成功地将我的框架添加到我的项目中。问题是我不能让它与我的标题的真实路径一起工作。并且使用绝对路径只是一种临时解决方案,对同事不友好。
不是我必须设置这种绝对路径:
我在我的框架项目中添加了这个模块映射作为私有模块映射。我的这项工作有什么选择吗?
提前致谢。