在 Xcode 4 中将静态库链接到 iOS 项目

Posted

技术标签:

【中文标题】在 Xcode 4 中将静态库链接到 iOS 项目【英文标题】:Linking a static library to an iOS project in Xcode 4 【发布时间】:2011-09-01 17:51:15 【问题描述】:

我有一个编译为静态库的项目 (AQGridView),但我似乎无法将它添加到我的项目中。

将项目拖入我的项目会创建一个工作区,如果我尝试从DerivedData 目录链接libAQGridView.a 文件,它不会将其识别为库。我不确定我做错了什么。

这是AQGridView 项目。有谁知道具体如何在 Xcode 4 项目中使用它?

【问题讨论】:

2 年后,你在 29 次赞成票后投票否决了我?最重要的是,您刚刚发表的声明没有任何意义。 How to "add existing frameworks" in Xcode 4? 的可能重复项 无法比这里更好地解释:Linking Static Libraries 【参考方案1】:

我这样做如下:

    拖入静态库项目。如果您在 Xcode 中打开了静态库项目,请立即关闭它。 在项目导航器中选择主项目(我要添加静态库的项目),然后在编辑器中,在左侧列的标题 TARGETS 下,选择我的主项目的目标并导航到构建阶段标签。 点击 Target Dependencies 的“+”,从添加的静态库项目中添加库图标目标依赖项。 点击 Link Binary with Libraries 的“+”并添加文件夹“Workspace”下的库图标。 如果静态库项目本身是这样链接头文件的,则可能还需要为静态库项目的头文件输入头文件搜索路径。

如果您在主项目的项目导航器中没有看到静态库项目嵌套在主项目下,最可能的原因是静态库自己的 Xcode 项目仍处于打开状态。退出 Xcode 并打开包含嵌套静态库项目的主项目,而不打开原始静态库项目本身,您应该会看到它在主项目中显示为嵌套项目。

【讨论】:

这似乎会起作用,但由于某种原因,该库没有显示在目标依赖项下。它显示在 Link Binary with Libraries 下,但不显示 Target Dependencies。我不知道为什么它不会出现。 原来项目必须嵌套,这将修复显示的目标依赖关系。 必须链接到库的主项目,以及包含标头的文件夹的路径(或者如果您想检查,则该文件夹的路径包含库的所有源代码递归框)。 你想把静态库拖到哪里?我的项目中没有可以接受拖动对象的面板... 你不拖一个静态库,你把静态库 Xcode 项目在项目导航器窗格中的主蓝色项目图标或它的 Finder 图标拖到项目导航器窗格中的主蓝色项目图标上您将其添加到的 Xcode 项目。【参考方案2】:

Xcode 菜单 > 视图 > 实用工具 > 文件检查器

选择静态库文件,然后在“Identity and Type”中设置“File Type”为“Mach-O object code”。

【讨论】:

哇,多么奇怪的解决方案,但完全适合我。谢谢!我的用例是在构建时将.a 静态库复制到Frameworks 中,并对其进行链接,在重新安排我的项目后开始抛出“找不到图像”库错误。不用了,多亏了以上内容。【参考方案3】:

工作区应该使这更容易,但我不知道他们会这样做。我这样做的方式是创建一个工作区,添加我的主项目,添加我的库项目。然后进入主项目的构建阶段,在“Link binary with libraries”部分添加库并添加库。这应该是所有必要的,至少这是我的阅读,但事实并非如此。我所做的是进入 Xcode 首选项,然后进入 Source Trees 窗格。添加指向静态库标题的源代码树,然后返回到项目的构建设置,然后到 Header Search Paths 键,并在此处输入 $foo,其中“foo”是您所称的源代码树.

这对我有用,但我不知道这是最好还是最简单的方法。

【讨论】:

如果您拥有最新版本的 XCode,这绝对是您的最佳选择。比挖掘项目内部和构建目录要容易得多。【参考方案4】:

在 finder 中找到您的 .a 文件,并将其拖到您的项目中。

选择“将项目复制到目标组的文件夹(如果需要)”,然后将标题添加到项目中。

现在,XCode 4 应该会自动为您链接到该框架。

下面是库在您的项目中的外观:

【讨论】:

我确实做了那件事,但它不承认它是一个库。该图标仅显示一个页面,而不是库指示器。 当然不是。它不应该看起来像一个框架。这并不意味着它没有链接。 Frameworks 有黄色图标,白色图标看起来像是罗马帝国建造的图书馆 :)【参考方案5】:

关注苹果的documentation。

简而言之:

    将您的目标与库链接。 将-ObjC 添加到目标构建设置下的“其他链接器标志”(OTHER_LDFLAGS)。

另外,我需要将该库添加到我的主项目的方案中,因为该库在目标的依赖项中不可见。

【讨论】:

【参考方案6】:

Halle 的回答对我有用,还有一个补充:

    在静态库项目的Build Settings中检查Private(或Public)Headers Folder Path值并复制它。 将复制的值添加到客户端项目构建设置 标题搜索路径用户标题搜索路径取决于包含 em> 您正在使用的指令

【讨论】:

以上是关于在 Xcode 4 中将静态库链接到 iOS 项目的主要内容,如果未能解决你的问题,请参考以下文章

Facebook iOS SDK - 如何为 Xcode 4.3 构建静态库?

多台机器上的 Xcode 4 项目

如何将 .a C 静态库添加到 Xcode 并在那里使用它? [复制]

我有一个Xcode静态库项目,如何添加测试目标,以便我可以在那里运行它? (而不是在链接到它的项目中。)

在Visual C ++中将静态库链接到新项目

在 Xcode 静态库中包含框架?