是否可以构建一个名为libA的静态库:
答案 0 :(得分:1)
简短回答,不。
静态引用需要在链接时解决 - 这就是静态链接的含义。
您可以做的是构建一个动态库,静态链接libB,然后从您的应用程序动态链接它。如果您更喜欢静态链接,则可以构建一个静态库,用于动态链接到动态链接库。
答案 1 :(得分:0)
有一种方法,但它不可移植,因为它依赖于所有目标代码格式不常见的功能。它也可能依赖于知道编译器的名称修改规则。在决定这样做之前,请考虑其他选择。
您可以在库中包含您引用的每个libB符号的未定义弱符号。如果您的代码在最终链接步骤中未与libB链接,则每个未定义的弱符号将为NULL。否则,未定义的弱符号将被libB中的符号取代。如果您正在使用GCC,则可以在符号声明上使用__attribute__((weak))
。