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

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

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

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

【问题讨论】:

标签: iphone objective-c ios xcode4


【解决方案1】:

我这样做如下:

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

如果您在主项目的项目导航器中没有看到静态库项目嵌套在主项目下,最可能的原因是静态库自己的 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

简而言之:

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

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

【讨论】:

    【解决方案6】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-23
      • 2016-10-19
      • 2012-12-24
      • 2011-07-15
      • 2013-01-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多