我维护我们的内部基础设施库 - 我们称它为 libcluracan
。该库必须静态链接,因为它不存在于使用代码的外部计算机上。
这意味着我不是使用链接器创建一个 libcluracan.so
文件,而是使用 ar
命令<创建一个 libcluracan.a
文件
现在我正在尝试向 libcluracan
添加一些新功能,但它需要与外部库链接 - 特别是 -lfltk
,但细节并不重要.重要的是我可以假设外部计算机有这个库(以及我需要的任何其他公开可用的库)。
最大的问题是我无法改变内部程序员编译(好吧,链接)他们的代码的方式。
如果我们一直在使用动态 libcluracan.so
库,我只需将 -lfltk
添加到链接器中,然后忘记它 - 程序员将继续使用 -lcluracan
并自动获取-lfltk
。
我需要找到一种方法来用我们的静态 libcluracan.a
库做同样的事情。
长话短说
有没有办法创建一个静态的 .a
库,在使用时自动链接到另一个动态的 .so
库?
最佳答案
The biggest problem is that I can't change how the in-house programmers compile (well, link) their code.
这确实是个大问题。您的内部程序员应该使用 make
(或类似的自动构建系统),并且更改将是微不足道的。
无法在任意 UNIX 系统上实现您想要的。
如果您正在使用 GNU 工具链,特别是 GNU-ld 或 gold
,那么您可以通过链接 libcluracan.so
来实现您想要的,其中 libcluracan.so
不是共享库,而是链接描述文件,如下所示:
GROUP ( libcluracan.a libfltk.so )
关于c++ - 如何创建一个自动链接到动态库的静态库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19463292/