如何创建自动链接到动态库的静态库?

时间:2013-10-19 06:49:26

标签: c++ linker shared-libraries ar .a

我维护内部基础架构库 - 让我们称之为libcluracan。此库必须静态链接,因为它在使用代码的外部计算机上不存在。

这意味着我不是使用链接器创建libcluracan.so文件,而是使用libcluracan.a命令创建ar文件

现在我正在尝试向libcluracan添加一些新功能,但它需要与外部库进行链接 - 特别是-lfltk,但具体细节并不重要。重要的是,我可以假设外部计算机有这个库(以及我需要的任何其他公共库)。

最大的问题是我无法改变内部程序员编译(好吧,链接)他们的代码的方式。

如果我们一直在使用动态libcluracan.so库,我只需将-lfltk添加到链接器并忘记它 - 程序员将继续与-lcluracan链接并获取{{1自动。

我需要找到一种方法来使用静态-lfltk库做同样的事情。

TL; DR

有没有办法创建一个静态libcluracan.a库,在使用时自动链接到另一个动态.a库?

1 个答案:

答案 0 :(得分:1)

  

最大的问题是我无法改变内部程序员编译(好吧,链接)他们代码的方式。

这确实是 一个大问题。您的内部程序员应该使用make(或类似的自动构建系统),并且更改将是微不足道的。

无法在任意UNIX系统上实现您想要的功能。

如果您使用的是GNU工具链,特别是GNU-ld或gold,那么您可以通过链接libcluracan.so来实现您想要的效果,其中libcluracan.so不是共享库,但是链接器脚本,如下所示:

GROUP ( libcluracan.a libfltk.so )