Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在iOS项目中构建和使用C库?_Ios_C - Fatal编程技术网

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

如何在iOS项目中构建和使用C库?,ios,c,Ios,C,我是iOS编程新手。我有一个使用c库的Android应用程序。我想创建相同的iOS应用程序并使用相同的库。我对此进行了搜索,但大多数结果都是针对objective-c编程的,并且有各种方法我无法选择。我相信有了新功能,我可以用swift做得更简单。 所以我的问题是我应该如何创建C库并在iOS项目中使用它?我能用cmake吗?我应该像下面第一个链接中所说的那样使用Swift软件包管理器吗 我在互联网上找到的最佳结果: Xcode可以编译C代码而无需额外设置。只需将您的C文件添加到项目中并选择适

我是iOS编程新手。我有一个使用c库的Android应用程序。我想创建相同的iOS应用程序并使用相同的库。我对此进行了搜索,但大多数结果都是针对objective-c编程的,并且有各种方法我无法选择。我相信有了新功能,我可以用swift做得更简单。 所以我的问题是我应该如何创建C库并在iOS项目中使用它?我能用cmake吗?我应该像下面第一个链接中所说的那样使用Swift软件包管理器吗

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


  • Xcode可以编译C代码而无需额外设置。只需将您的C文件添加到项目中并选择适当的目标

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

    下面是一个如何从头开始在同一个项目中使用C和Swift的示例。您可以对现有的C代码执行同样的操作

  • 创建一个新的iOS项目
  • 通过单击command+N添加C文件。选择带标题的C文件。
  • Xcode应该建议添加桥接头并自动创建它。如果没有发生,您可以通过创建头文件并将其名称添加到项目的生成设置中来手动完成。
  • 在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; 
     }
    
  • 现在,您可以在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标题:


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

    我不想在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)")
         }
     }