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

时间:2017-09-26 20:29:57

标签: swift module xcode9 module-map

我试图在我的Swift项目中包含第三方静态库。我有这两个文件,其中包括其他文件。

  

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的库

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

1 个答案:

答案 0 :(得分:1)

模块图是我麻烦的同义词!桥接标题很糟糕,但它们只适用于大多数情况。无论如何,请确保:

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

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

Omar Abdelhafith在这件事上有一个邪恶的blog post,在处理这类事情时也有助于看到how others do it