使用未解析的符号链接静态库

时间:2016-11-29 13:26:30

标签: c++ gcc linker ld

我有一个静态库libA.a,它包含未解析的符号(它们也可以在另一个静态库libA_dep.a中使用)

我创建另一个共享库libB.so,它与libA.a链接。

当用户将她的程序与libB.so链接时,她还需要链接libA_dep.a,否则会有未解析的符号。出于许可原因,我无法向用户发布libA_dep.a。有办法解决这个问题吗? (例如,将libB.so与libA_dep.a链接,并告诉链接器将这些符号放入.so)

1 个答案:

答案 0 :(得分:0)

您可以执行以下操作,但这将是相当多的工作:

创建一个不包含任何内容的空.cpp,编译它。然后使用--whole-archive选项将其与静态库链接,以生成共享库。实质上,这会将静态库转换为.so

最终要做的是创建一个共享库,其中包含您自己的代码使用的静态库中的所有代码。然后,将主应用程序与共享库而不是静态库链接。

您必须提供与您的客户相同的脚本,以便他们自己可以合法地获取该静态库,并将其转换为您所做的同一个共享库,从而允许他们运行您的代码是针对共享库版本构建的。