【问题标题】:How to include static library into Swift project?如何将静态库包含到 Swift 项目中?
【发布时间】:2016-03-22 13:25:06
【问题描述】:

我有一个快速的基础项目 iPhone 应用程序。我想在其中使用 Zoiper SDK。 我从他们那里得到的是静态库(.a 文件):

- libcrypto.a
- libsipwrapper.a
- libssl.a

可能用 Objective-C 编写。

还有外部头文件

- wrapper_defs.h, 
- wrapper_cbk.h, 
- wrapper.h

用 Objective-C 编写。

我尝试像这样添加桥接头:

#ifndef ZoiperTest_Bridging_Header_h
#define ZoiperTest_Bridging_Header_h

#import "include/wrapper_defs.h"
#import "include/wrapper_cbk.h"
#import "include/wrapper.h"

#endif /* ZoiperTest_Bridging_Header_h */

但这会返回很多错误(无法识别 wrapper.h 中使用的类型)

我是否必须将库 .a 文件也包含到桥接头中? 确切的语法是什么?

我尝试将#import 添加到桥头中,但这给了我找不到文件的错误。

【问题讨论】:

  • .a 文件是二进制文件,绝对不属于头文件(或在编译阶段构建的任何其他内容)。您最好尝试找出 wrapper.h 错误。
  • 确保将二进制文件和标头添加到项目中并“复制捆绑资源”。只是#import "wrapper.h" 工作而不是"include/wrapper.h"
  • @Phillip Mills,所以我不必将 .a 文件包含到桥接头中?我已经尝试过了,奇怪的是,现在我在其中一个标题中得到了“参数 size_t 的重新定义”。我没有使用objective-c的经验,所以我不知道这意味着什么。现在将谷歌它。
  • @JAL 我已经检查了那部分,我试过没有文件夹,它给出了相同的结果。
  • 您能否提供几个错误示例以及错误所指的 *.h 文件中的代码 sn-ps?您确定标题中的代码不是 C++ 吗?如果是,那么您将不得不在 C 或 Objective-C++ 中围绕 C++ 代码编写一个包装器。而且,正如其他人所说的那样,.a 文件绝对不属于桥接头。

标签: ios objective-c xcode swift static-libraries


【解决方案1】:

我可以将 zoiper SDK 集成到一个 swift 项目中。对我来说最简单的方法是在 Objetive-C 上使用库创建一个静态库,并将其集成到我的 swift 项目中。 -> https://github.com/depazsierra/zoiperExample

在静态库上,我重用了 zoiper 示例附带的 ZSDKLibControl。

有任何问题,请告诉我。

【讨论】:

  • 如果你能提供具体的例子来说明如何实现它会有所帮助
【解决方案2】:

你可以做的是以下,它对我有用。从头开始创建一个静态库。添加 .h(包装器),包括演示中的 LibController。然后,一旦您完成点击此链接:如何在 swift 中使用 .a 静态库?

我能够使用这些方法,但尚未完全测试。

【讨论】:

    猜你喜欢
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    • 1970-01-01
    • 2021-07-29
    相关资源
    最近更新 更多