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

How do I create a static library which automatically links to a dynamic library?

本文关键字:链接 动态 静态 何创建 创建      更新时间:2023-10-16

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

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

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

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

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

我需要找到一种方法来对我们的静态libcluracan.a库做同样的事情。

博士

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

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

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

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

如果你使用的是GNU工具链,特别是GNU-ld或gold,那么你可以通过与libcluracan.so链接来实现你想要的,其中libcluracan.so不是一个共享库,而是一个链接器脚本,看起来像这样:

GROUP ( libcluracan.a libfltk.so )