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

76

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

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

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


1
你在29个赞成票之后,两年后还要给我投反对票?而且你刚刚说的话根本没有意义。 - Matt Hudson
无法比这里更好地解释: 链接静态库 - Subham93
6个回答

95
我按照以下步骤操作:
  1. 将静态库工程拖入主工程。如果你在Xcode中已经打开了静态库工程,请关闭它。
  2. 在项目导航器中选择主工程(我要添加静态库的那个项目)并在编辑器中,在左侧的TARGETS标题下,选择我的主工程目标,并导航到Build Phases选项卡。
  3. 点击“+”按钮,并添加从添加的静态库工程中的library icon target dependency。
  4. 点击“+”按钮,并添加“Workspace”文件夹下的library icon。
  5. 如果静态库工程中是通过头文件链接的方式连接头文件,则还需要输入一个Header Search Path。
如果你在主工程的项目导航器中没有看到静态库工程嵌套在主工程下面,最有可能的原因是静态库自身的Xcode项目仍然处于打开状态。退出Xcode,打开包含嵌套静态库工程的主工程,而不要打开原始的静态库项目本身,这样你就应该能在主工程中看到它作为一个嵌套项目出现了。

18
看起来这个方法应该能够运行,但出现了一个问题,图书馆在“目标依赖项”下并没有显示出来。它出现在“链接二进制库”下,但不在“目标依赖项”下。我想不出为什么它不会显示出来。 - Matt Hudson
3
原文:Turns out that the project has to be nested, this will fix the Target Dependency showing up.翻译:事实证明,该项目必须嵌套,这将修复目标依赖项的显示问题。 - Matt Hudson
1
你应该把静态库拖到哪里?我的项目中没有可以接受拖动对象的面板... - zakdances
2
你不需要拖动静态库,而是需要将静态库Xcode项目的主蓝色项目图标从项目导航器窗格或Finder图标中拖到你要添加它的Xcode项目的主蓝色项目图标上。 - Halle
1
我按照这里的说明操作,解决了所有问题:https://developer.apple.com/library/ios/technotes/iOSStaticLibraries/iOSStaticLibraries.pdf。特别是在我的主项目中将“Other Linker Flags”属性设置为-ObjC就解决了问题。 - Lee Probert
显示剩余11条评论

15

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

选择静态库文件,然后在“身份和类型”中将“文件类型”设置为“Mach-O 对象代码”。


哇,真是一个奇怪的解决方案,但完全对我起作用。谢谢!我的使用情况是在构建过程中将.a静态库复制到“Frameworks”中,并针对它进行链接,但在重新排列项目后开始出现“找不到图像”库错误。由于上述问题已经不存在了,非常感谢。 - Markus Amalthea Magnuson

5
在Finder中找到你的.a文件,将其拖入项目中。
选择“将项目复制到目标组文件夹(如果需要)”,并将头文件添加到项目中。
现在,Xcode 4应该会自动为你链接该框架。
以下是库在你的项目中的样子:

1
我做了同样的事情,但它没有将其识别为库。图标只显示为一个页面,而不是库指示器。 - Matt Hudson
当然不是。它不应该看起来像一个框架。这并不意味着它没有链接。 - Richard J. Ross III
框架有黄色图标,看起来像罗马帝国建造的白色图标是库 :) - Matt Hudson

5

工作区应该能够使这个过程更加简单,但我不确定是否真的如此。我的做法是创建一个工作区,添加我的主项目和库项目。然后进入主项目的构建阶段,在“链接二进制文件”部分添加库并将其链接。这应该就足够了,至少我是这么看的,但事实并非如此。

我会进入Xcode首选项,然后到源树面板。添加一个指向你的静态库头文件的源树,然后回到你的项目的构建设置中,找到头文件搜索路径键,输入${foo},其中“foo”是你所添加的源树的名称。

这是我使用的方法,但我不知道它是否是最好或最容易的方法。


如果你有最新版本的XCode,这绝对是最好的选择。比深入项目内部和构建目录要容易得多。 - zakdances

3

请遵循苹果公司的文档进行操作。

简要步骤如下:

  1. 将目标文件与库文件进行链接。
  2. 在目标项目的构建设置中的“其他链接器标志”(OTHER_LDFLAGS)中添加-ObjC

此外,由于该库文件并未出现在目标项目的依赖中,因此我需要将它添加到我的主项目方案中。


0

Halle的答案对我有用,但还需要添加一点:

  1. 检查静态库项目的Build Settings中的Private(或Public)Headers Folder Path值并复制它。
  2. 将复制的值添加到客户端项目的Build Settings Header Search PathUser Header Search Path,具体取决于您使用的include指令。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接