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 - 库搜索路径和项目框架之间的关系的主要内容,如果未能解决你的问题,请参考以下文章