适用于iPhone / CocoaTouch链接库的库的正确方法

时间:2009-03-08 05:08:48

标签: iphone static-libraries libxml2 static-linking

我正在为iPhone编写一个静态库,我想知道我在做什么是推荐的还是我应该采取不同的方法。

我写的静态库依赖于libxml2。 libxml2有一个动态库(dylib)和一个静态库(a)。我尝试了两种方法。

方法一 - 当我尝试通过将“-lxml2”添加到“其他链接器标志”来链接静态库时,构建失败并显示以下消息:

/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/libtool: file: -lxml2 is not an object file (not allowed in a library)

方法二 - 我可以成功链接静态库中的动态库,但我不确定iPhone上是否允许(或正确的方法)。即使我正在构建静态库,Apple是否允许链接动态库的静态库?我还在学习静态库,但根据我的理解,来自dylib的代码将与我的代码组合在一起构成一个库,因此与dylib链接应该不是问题。

总结:

  • mylibrary.a - > libxml2.a [不起作用]
  • mylibrary.a - > libxml2.dylib [Builds,但这是正确的,可以接受吗?]

3 个答案:

答案 0 :(得分:8)

SDK中提供了libxml2.dylib。 正确的方式是在Xcode中双击目标节点/应用程序,然后在“常规”下单击“链接库”下的 + ...您应该找到该列表中的libxml2.dylib

0:42在此Screencast中,您可以看到CoreGraphics是如何添加到项目中的。

答案 1 :(得分:0)

您无法将库静态链接到其他静态库。这就是依赖于其他静态库的框架和库要求使用者手动将它们添加到Link Binary With Libraries构建阶段或其他Linker Flags构建设置的原因。

答案 2 :(得分:-8)

Apple不允许您链接除SDK提供的框架和/或库之外的框架和/或库。