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

时间:2012-05-03 21:59:45

标签: c++ xcode xcode3.2

作为一名来自VS的新MAc开发人员,我并不真正“了解”框架是什么。如果我将一个框架添加到我的项目中,这是否自动意味着我应该在#include <SomeFile.h>时找到标题?

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

2 个答案:

答案 0 :(得分:4)

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 是该框架或其子框架中的头文件的名称。

     

包含框架头文件时,传统包含   只有主框架头文件。主头文件是   头文件,其名称与框架的名称相匹配。例如,   Address Book框架有一个名为master的头文件   AddressBook.h

要包含自定义框架:

  

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

答案 1 :(得分:3)

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

  1. 如果您没有添加框架,但实际上是来自/ usr / lib的传统Unix库(libsqlite3.dylib,libxml2.dylib等)。那么可能是图书馆有一个单独的(非标准)包含路径;这是常见的,例如,在glib的情况下。在这种情况下,您必须将/usr/include/glib-2.0添加到标题搜索路径中。
  2. 相反的情况:当你遇到一些“Umbrella”框架时(例如,Core Audio被分成小的子框架,例如AudioToolbox.framework等),那么该特定框架不包含可链接的动态库,只有标题。
  3. 我希望这会有所帮助。