1

是否有可能建立一个静态库,叫,说,力霸认为:如何构建可选地使用其他静态库的静态库?

  1. 包含在从libB类调用的代码(不是我创造的,所以我不能修改或访问);
  2. 将其编译到未链接到libB的应用程序中(当然,如果使用libB的类的代码是在没有libB的情况下调用的,它会崩溃,但我可以解决这个问题,我只需要与libA链接的应用程序但不是libB编译。)?
+2

据我所知,父应用程序必须链接两个库。我很乐意听到别的。 – Justin 2010-11-09 19:04:28

回答

1

简答题,没有。

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

你可以做的是建立一个静态链接libB的动态库,然后动态链接它与你的应用程序。如果你更喜欢静态链接,你可以建立一个静态库,动态链接到你的动态链接库。

0

有一种方法,但它不具有可移植性,因为它依赖于所有目标代码格式不常用的功能。它也可能依赖于知道编译器的名称规则。在决定执行此操作之前,请考虑您的其他选项。

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