我只是想了解带有静态链接库的共享库的预期性能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可用。
1条答案
按热度按时间hi3rlvi21#
将由www.example.com加载的库的静态版本(lstatic)lshared.so与动态版本(lstatic.so)冲突。
可能吧。
将它们共享任何全局状态。
可能吧。
答案取决于
lshared.so
是如何 * 精确 * 构建的(它导出哪些符号),以及helloworld
主二进制文件是如何链接的。答案也往往有些复杂,可能取决于内联和其他优化,还可能取决于编译器版本。
最好使用
lstatic.so
的共享版本来避免这样做,在那里所有的答案都变得简单。