如何从具有嵌套标头的 C 库创建框架



我想为一个流行的C库创建一个iOS框架。

我目前的设置:

这就是我正在做的:

  1. 为 iOS 和 iPhone 模拟器架构构建库
  2. 使用lipo将两个存档.a文件合并到一个胖库中
  3. 使用libtool -static -o获取最终库

在这个阶段,我有一个二进制文件和一堆头文件。在 xcode 中:

  1. 删除二进制文件(从步骤 3 开始(并确保其链接在:Target > General > Framework and LibrariesTarget > Build Phases > Link Binary with Libraries

  2. 我从 C 库中复制所有头文件并将它们放在目录Dependencies/myClibrary/include/下。includedir 包含一个主头文件myClibrary.h其中包括许多来自./abstract/*.h的头文件。

  3. 在 xcode 项目目录的顶层,我还创建了一个包含以下内容的module.map文件:

module MyWrapperFramework [system] {
header "Dependencies/myClibrary/include/myClibrary.h"
export *
}
    将所有头文件
  1. 添加到 xcode,对于每个头文件,Target Membership下将值从project更改为public

在应用中测试框架

我能够使用上述设置构建框架。但是,当我想在测试Objective C应用程序中对其进行测试时,我会导入框架并调用与myClibrary相关的函数。在构建应用程序时,我收到错误:

'myClibrary/abstract/headername.h' file not found

上述错误源于myClibrary的主头文件myClibrary

我能找到的大多数教程都涉及具有单个头文件的 C 库。如何从包含嵌套头文件的 C 库创建 iOS 框架?

如果嵌套头文件不是这里的主要问题,我做错了什么?

框架的标头安装在 .framework 内的 Headers 目录中。 编译器知道足够的魔力,当你说 #import 时,它将开始在该标头目录中搜索myClibrary.h。

因此,默认的公共标头构建规则是将所有公共 .h 文件(无论它们在源代码树中的位置如何(复制到该标头目录中。 在构建过程中,该目录应设置为 $PUBLIC_HEADERS_FOLDER_PATH 变量。

似乎您需要将标头安装到不同的目录中。 只需将生成设置中的公共标头文件夹路径的值设置为子目录,然后该子目录将在那里安装所有公共标头。 然后,您可以有一个自定义的"复制文件"生成阶段,以仅将单个整体标头安装到原始标头目录中。

或者,您可以只添加作为公共标头进入根目录的标头,然后对所有其余部分进行自定义复制文件阶段,将它们复制到自定义子目录中。 我认为如果您选择"包装器"作为目的地,那就是框架的根,因此如果子路径是"标头/抽象",则应工作(尽管我尚未测试自己(。 如果需要有多个子目录,则需要为每个子目录进行自定义"复制文件"生成阶段。

或者,当然,有一个自定义构建脚本来更手动地复制标头,如果这比多个构建阶段更容易(例如,如果有很多子目录,则将包含目录中的所有文件复制到 $PUBLIC_HEADERS_FOLDER_PATH 但保留结构(。

相关内容

  • 没有找到相关文章

最新更新