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

XCode3 - relationship between Library Search Paths and project Frameworks

本文关键字:框架 之间 关系 项目 搜索 路径 XCode3      更新时间:2023-10-16

作为来自VS的新MAc开发人员,我并不真正'理解'框架是什么。如果我向项目添加一个框架,这是否自动意味着当我执行#include <SomeFile.h>时应该找到标头?

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

根据 Apple 概念文档的定义:

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

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

Apple 概念文档详细介绍:

您可以使用#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 可以找到其头文件之前,该框架。要指定 此类框架的位置,添加包含 框架到Xcode的"框架搜索路径"选项 项目。Xcode 将此目录列表传递给编译器,并 链接器,它们都使用列表来搜索框架资源。

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

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

我希望这有所帮助。