gcc 具有静态链接依赖项的共享库

nimxete2  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(180)

我只是想了解带有静态链接库的共享库的预期性能lshared.so。(* 静态 *)。现在,我有另一个可执行文件 helloworld,它加载库 lstatic 的动态版本(lstatic.so)和 lshared.so。由lshared.so加载的库的静态版本(lstatic)和动态版本(lstatic.so)是否会冲突?它们是否会共享任何全局状态?尝试在下面更好地显示它。

helloworld
     --> lshared.so (statically linked to lstatic at compile time)
     --> lstatic.so (hello world loads this at runtime)

为了抛出一些上下文,我必须使用一个共享库来记录日志。有可能lshared.so静态链接到一个不同的版本,而这个版本在运行时对helloworld可用。

hi3rlvi2

hi3rlvi21#

将由www.example.com加载的库的静态版本(lstatic)lshared.so与动态版本(lstatic.so)冲突。
可能吧。
将它们共享任何全局状态。
可能吧。
答案取决于lshared.so是如何 * 精确 * 构建的(它导出哪些符号),以及helloworld主二进制文件是如何链接的。
答案也往往有些复杂,可能取决于内联和其他优化,还可能取决于编译器版本。
最好使用lstatic.so的共享版本来避免这样做,在那里所有的答案都变得简单。

相关问题