2017-09-26 75 views
1

我想在我的Swift项目中包含第三方静态库。我有这两个文件,以及其他几个文件。如何在Swift中使用静态库和模块映射文件?

GoogleConversionTrackingSDK/ACTReporter.h GoogleConversionTrackingSDK/libGoogleConversionTracking.a

我加入了.a文件到目标的“链接的框架和库”部分。然后我创建了一个module.map文件在我的项目,像这样:

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

而且在斯威夫特文件,我现在可以参考一下吧:

import GoogleConversionTracking 

但我在链接时出现错误:

ld: library not found for -lGoogleConversionTracking
clang: error: linker command failed with exit code 1 (use -v to see invocation)
note: library not found for -lGoogleConversionTracking

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

回答

0

模块图是我麻烦的代名词!桥接标题吸引人,但他们只是在大多数情况下工作。无论如何,请确保:

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

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

Omar Abdelhafith在这方面有一个恶作剧blog post,在处理这些事情时也可以看到how others do it

相关问题