如何构建可选择使用其他静态库的静态库?

时间:2010-11-09 19:02:26

标签: iphone objective-c cocoa-touch dependencies static-libraries

是否可以构建一个名为libA的静态库:

  1. 包含从libB调用类的代码(不是由我创建的,因此我无法修改或访问它);
  2. 当放入一个没有链接到libB的应用程序时会编译(当然,如果使用libB的类的代码在没有libB的情况下调用它会崩溃,但我可以解决这个问题。我只需要与libA链接的应用程序但不是libB来编译。)?

2 个答案:

答案 0 :(得分:1)

简短回答,不。

静态引用需要在链接时解决 - 这就是静态链接的含义。

您可以做的是构建一个动态库,静态链接libB,然后从您的应用程序动态链接它。如果您更喜欢静态链接,则可以构建一个静态库,用于动态链接到动态链接库。

答案 1 :(得分:0)

有一种方法,但它不可移植,因为它依赖于所有目标代码格式不常见的功能。它也可能依赖于知道编译器的名称修改规则。在决定这样做之前,请考虑其他选择。

您可以在库中包含您引用的每个libB符号的未定义弱符号。如果您的代码在最终链接步骤中未与libB链接,则每个未定义的弱符号将为NULL。否则,未定义的弱符号将被libB中的符号取代。如果您正在使用GCC,则可以在符号声明上使用__attribute__((weak))

相关问题