9

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

GoogleConversionTrackingSDK/ACTReporter.h GoogleConversionTrackingSDK/libGoogleConversionTracking.a

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

module GoogleConversionTracking {
    header "../../Libs/GoogleConversionTrackingSDK/ACTReporter.h"    
    export *
}

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

import GoogleConversionTracking

但我在链接时收到错误:

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

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

4

1 回答 1

11

模块图是我麻烦的代名词!桥接头很糟糕,但它们在大多数情况下都有效。无论如何,请确保:

  • 配置SWIFT_INCLUDE_PATHS– Swift 编译器搜索其他 Swift 模块的路径列表。这告诉 Xcode 你的模块映射在哪里。
  • 配置LIBRARY_SEARCH_PATHS- 这是链接器搜索产品使用的库的文件夹路径列表。Xcode 仍然需要知道模块的二进制文件在哪里。

此外,您可能想要使用伞形标题,而不仅仅是标题,请参阅文档。我还建议使用modulemap扩展,不确定是否module.map会有所不同,但这就是我记得在大多数项目中看到和使用它的方式。

Omar Abdelhafith 有一篇关于这个问题的邪恶博客文章,它也有助于了解其他人在处理这类事情时是如何做到的。

于 2017-09-28T10:57:03.667 回答