c++ - 如何创建一个自动链接到动态库的静态库?

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

我维护我们的内部基础设施库 - 我们称它为 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/

相关文章:

ubuntu - 如何解决 Ubuntu 中的链接错误?

c++ - 尝试使用 dlopen 加载库时 undefined symbol

c++ - 公钥或 Diffie-Hellman key 交换算法

c++ - 如何使用 + 运算符在 cpp 中添加字符串和数字?

linker - 了解 ldd 输出

shared-libraries - 使用 Cargo 选择共享库或静态库

python - 为什么 MATLAB 不能导入这个 python 库?

c++ - 尝试在 C++ 中实现固定大小队列时出现段错误

c++ - 使用 glm::vec< 3 , double > 时出错

c++ - 使用 ArrayFire 库