gpt4 book ai didi

linux - 如何将静态库嵌入到共享库中?

转载 作者:太空狗 更新时间:2023-10-29 12:22:30 24 4
gpt4 key购买 nike

在 Linux 上,我正在尝试创建一个共享库 libbar.so,它嵌入了一个商业静态库(许可很好)。商业库有 4 个版本:libfoo-seq.a、libfoo-mt.a、libfoo-seq.so 和 libfoo-mt.so(它们都提供相同的符号,只是代码是顺序的/多线程的,并且该库是静态/共享的)。在这四个中,我希望我的代码始终使用顺序 foo 库,所以当我创建 libbar.so 时,我将我的目标文件和 libfoo-seq.a 链接在一起。

问题是我的库的用户在他们拉入我的 libbar.so 时可能已经拉入了 libfoo-mt.so,因此在读入 libbar.so 时来自 libfoo 的所有符号都已经存在, 所以我对 foo 中函数的调用被解析为多线程版本。

我想知道如何解决这个问题?当我编译以创建我的目标文件以及当我将我的目标文件与 libfoo-seq.a 链接以创建 libbar.so 时,我需要使用什么样的魔法标志?

最佳答案

您可以通过版本脚本在 libbar 中隐藏 libfoo 的符号:

$ cat libbar.map
{
global: libbar_*;
local: libfoo_*;
};
$ gcc ... -o libbar.so -Wl,--version-script=libbar.map

关于linux - 如何将静态库嵌入到共享库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56223624/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com