XCode3 - 库搜索路径和项目框架之间的关系

Posted

技术标签:

【中文标题】XCode3 - 库搜索路径和项目框架之间的关系【英文标题】:XCode3 - relationship between Library Search Paths and project Frameworks 【发布时间】:2012-05-03 21:59:45 【问题描述】:

作为来自 VS 的新 MAC 开发人员,我并没有真正“了解”什么是框架。如果我在我的项目中添加一个框架,这是否意味着当我执行#include <SomeFile.h> 时应该可以找到标头?

我似乎发现在某些情况下我还必须添加标题搜索路径。这是否意味着框架无法正常工作?

【问题讨论】:

【参考方案1】:

由Apple Conceptual Documentation定义:

框架是封装共享的分层目录 资源,例如动态共享库、nib 文件、图像文件、 本地化字符串、头文件和参考文档 单包。

换句话说,它是一个或多个应用程序可以使用的资源的汇编,它本身并不是一个应用程序。

详情由Apple Conceptual Documentation:

您使用#include 在代码中包含框架头文件 指示。如果你在 Objective-C 中工作,你可以使用 #import 指令而不是 #include 指令。他们俩 指令具有相同的基本结果。但是#import 指令 保证同一个头文件不会被多次包含。 包含框架头有两种方法:

#include <Framework_name/Header_filename.h>
#import <Framework_name/Header_filename.h>

在这两种情况下,Framework_name 都是框架的名称,并且 Header_filename 是该框架或其子框架之一中的头文件的名称。

在包含框架头文件时,传统的做法是包含 只有主框架头文件。主头文件是 名称与框架名称匹配的头文件。例如, 地址簿框架有一个主头文件,其名称为 AddressBook.h.

要包含自定义框架:

如果您的项目链接到的框架未包含在任何 标准位置,您必须明确指定 该框架在 Xcode 可以找到其头文件之前。指定 此类框架的位置,添加包含 框架到“Framework Search Paths” option of your Xcode project。 Xcode 将此目录列表传递给编译器,然后 链接器,它们都使用列表来搜索框架资源。

【讨论】:

【参考方案2】:

如果框架编写正确,它会包含标头以及实际的可链接(二进制)文件。编译器(以前是 GCC,最近是 LLVM-clang)识别框架路径并自动知道在哪里搜索框架头文件。不过也有一些极端情况:

    如果您不添加框架,而是添加来自 /usr/lib 的传统 Unix 库(libsqlite3.dylib、libxml2.dylib 等)。那么可能是库有一个单独的(非标准)包含路径;这很常见,例如,在 glib 的情况下。在这种情况下,您必须将 /usr/include/glib-2.0 添加到您的标头搜索路径中。 相反的情况:当您遇到一些“Umbrella”框架(例如,Core Audio 被拆分为小的子框架,如 AudioToolbox.framework 等)时,该特定框架不包含可链接的动态库,只有标题。

我希望这会有所帮助。

【讨论】:

以上是关于XCode3 - 库搜索路径和项目框架之间的关系的主要内容,如果未能解决你的问题,请参考以下文章

XCode 3.2.6 无法识别 Cg 框架

在 xcode 4.x 中添加静态库的标头搜索路径混淆?

Lucene,Nutch,Hadoop 之间有什么关系?

Lucene,Nutch,Hadoop 之间有什么关系?

标题搜索路径和库搜索路径之间的区别?

2017年前端框架类库工具大比拼