使用Xcode中的现有C代码为iOS创建静态库

时间:2014-07-15 07:29:59

标签: ios c xcode static-libraries enet

问题的简短版本:

所以基本上我要做的就是用C语言编写的现有库(https://github.com/lsalzman/enet)并将其转换为iOS的静态库。

我只是想逐步了解如何在Xcode中实现这一目标。

长版:

我已经完成了一些教程,用于创建一个用Objective-C(http://www.raywenderlich.com/41377/creating-a-static-library-in-ios-tutorial)编写的简单静态库,我通常了解那里发生了什么,但我'我无法理解如何使用C语言编写现有代码。

我想我已经接近了,但我不太确定。

  1. 我开始制作一个" Cocoa Touch Static Library"项目在xcode。
  2. 我添加了所有的enet .h和.c文件
  3. 确保enet内容符合我的用户标题搜索路径"在构建设置中。
  4. 点击构建 - 它编译!
  5. 生成的.a文件是517kb,所以我很确定它现在正在构建enet内容。

    我现在的问题是库的头文件基本上是空的:

    #import <Foundation/Foundation.h>
    
    @interface enet_ios : NSObject
    
    @end
    

    我认为我需要在Objective-C中编写一个与enet库对话的包装器,或者我需要以某种方式重新配置我的xcode项目,以便enet.h是&#39;入口点&# 39;进入这个库而不是xcode预先生成的.h / .m文件。不过,我不确定该怎么做。理想情况下,我只想跳过任何类型的包装器并使用enet库已经为我提供的内容。

    谢谢你看看!

1 个答案:

答案 0 :(得分:1)

问题,您是否尝试使用目标c语法/对象方向表示法调用函数?然后你需要一个包装器对象,没有办法解决这个问题。

但如果您可以直接调用C函数,这在IOS / Objective C中是完全可以接受的,那么确保您的enet库中的头文件(我在github中看到的include目录中的文件)是一个问题。您共享的链接)也随静态库一起分发。这是静态库的限制。您可以使用* .a复制它们,但必须使用静态库复制它们。这与框架有所不同,框架包括.H和资产,开发人员无法使用Apple的IOS工具轻松创建。

我发现使用Objective C的库管理本身就很痛苦,静态库对此以及其他许多原因都是一个挑战。另外一个建议,绝对更优雅和便携,但个人使用稍微有点过分,将建设项目作为cocoapod。您可以通过分叉项目并将其转换为cocopods来完成此操作。有很多关于项目结构应该如何看待cocopods和其他OSS如AFNetworking的例子。这似乎是人们创建IOS库的事实标准方式。有关详细信息,请参阅http://cocoapods.org/。这将包括作为pod的源代码,并针对目标应用程序进行编译。

这是我处理自己的库和第三方库的唯一方法。它已经到了这样的程度:如果图书馆没有使用cocoapods,我就不会使用该库或将它分叉并自己制作一个pod ....