2011-03-30 135 views
2

我创建了一个静态库,内部包含“Link Binary With Libraries”文件夹中的另一个静态库(X)。但是,当我将库导出到示例项目并尝试编译时,无法找到X库路径。我正在添加“。”在构建我的静态库时,在“库搜索路径”构建参数中。编译静态库内的静态库 - 问题

这是什么我在这里失踪?

回答

2

如果我正确理解你的问题,那么它不是一个链接器搜索路径问题,但更多是一个概念问题。

我看到了解决问题的两种选择:

常见的和直接的解决方案;

  • 添加静态库项目到您的应用程序的项目
  • 拓展项目包括
  • 扩展您的应用程序项目
  • 的目标展开“链接二进制与图书馆” -entry
  • 将您的图书馆项目(实际图书馆)的产品文件拖入该“带库的链接二进制文件” - 条目
  • 将您的0123项目中的两个图书馆项目的头文件路径构建设置

下一个方法是非常规的,在大多数情况下只是不值得额外的一英里。在进入细节之前,先来解释一下。

静态库的概念基本上是一堆对象文件塞进一个单一的文件(档案)。将一个静态库与另一个静态库链接起来并不常见 - 呃,要正确拼出它,不可能。

...但话又说回来,没有什么是不可能的,当它涉及到编码;)...

包装器库解决方案;

  • 使用ar从所有要
  • 使用ar与建立头结合起来,所有这些目标文件合并成一个大的,新的图书馆
+0

第一个选择对我来说很好,事实上我试图走回头路但面临的问题。我是这样做的:创建我自己的静态库和头文件,并将它们放到我想要使用它的项目的XCODE中的Frameworks文件夹中。与我的静态库一起,我还将其他静态库直接放在Frameworks中。这些是我想放在静态库中的库。最后,在这个项目的构建设置中,我将“Header Search Path”设置为这些库的路径。 – Abhinav 2011-03-30 22:23:51

+0

按照我所描述的“常见和直接解决方案”的方式完成后,确切的链接器错误消息是什么? – Till 2011-03-30 22:27:49

+0

编译时我收到此错误:架构ARMv6的未定义符号: “_OBJC_CLASS _ $ _ MyLib中”,从引用: objc级,裁判在TestAppDelegate.o LD:符号(S)没有发现架构的ARMv6 collect2: ld返回1退出状态 – Abhinav 2011-03-30 22:28:57

2

沿库中提取的所有目标文件搜索路径,尝试设置其他连接器标志太多..

转到“链接器”部分下的“其他链接器标志”,并将“-ObjC”和“-all_load”添加到标志

希望,你的作品,

+0

这两个提到的标志只有在库中包含其他实现类的类别时才有用。实际上,因为只有铛3只有-ObjC是必要的。 – Till 2012-07-25 19:30:28