如何在iOS项目中构建和使用C库?

时间:2019-05-12 04:27:07

标签: ios c

我是iOS编程的新手。我有一个使用c库的Android应用。我想创建相同的iOS应用并使用相同的库。我进行了搜索,但是大多数结果都是针对Objective-C编程的,我无法选择多种方法。我相信有了新功能,我可以迅速轻松地做到这一点。 所以我的问题是我应该如何创建C库并在iOS项目中使用它?我可以使用cmake吗?我应该像下面第一个链接中所述使用Swift软件包管理器吗?

在互联网上找到的最佳结果:

  1. https://medium.com/shopify-mobile/wrapping-a-c-library-in-swift-part-1-6dd240070cef
  2. Compiling external C++ library for use with iOS project

1 个答案:

答案 0 :(得分:3)

Xcode无需其他设置即可编译C代码。只需将C文件添加到项目中,然后选择适当的目标即可。

要在Swift上使用C代码,您应该创建桥接标头。

这里是一个示例,说明如何从头开始在同一项目中使用C和Swift。您可以使用现有的C代码执行相同的操作。

  1. 创建一个新的iOS项目。
  2. 通过单击Command + N添加C文件。选择带有标题的C文件。 C file
  3. Xcode应该建议添加桥接头并自动创建它。如果没有发生,您可以通过创建头文件并将其名称添加到项目的设置中来手动完成。 Bridging header Build settings
  4. 在C文件中添加一些功能。例如:

     // example.h
     #include <stdio.h>
     int exampleMax(int num1, int num2);
    
     // example.c
     #include "example.h"
    
     int exampleMax(int num1, int num2)
     {
         int result;
         if (num1 > num2)
             result = num1;
         else
             result = num2;
         return result; 
     }
    
  5. 将C标头添加到桥接文件中

     // ModuleName-Bridging-Header.h
     #import "example.h"
    
  6. 现在您可以在Swift文件中使用C代码了:

     import UIKit
    
     class ViewController: UIViewController {
         override func viewDidLoad() {
             super.viewDidLoad()
             let number1 = Int32(1)
             let number2 = Int32(5)
             let result = exampleMax(number1, number2)
             print("min = \(result)")
         }
     }
    

自动完成应该看到您的C标头:

Auto completion

您可以使用modulemap文件代替桥接头。它更加灵活方便,但设置起来有些困难。