具有静态链接依赖项的共享库
Shared library with statically linked dependencies
我只是想了解带有静态链接库的共享库的预期性能。我正在编写一个静态链接到另一个库 (lstatic) 的共享库 (lshared.so)。现在,我有另一个可执行文件 helloworld,它加载库 lstatic (lstatic.so) 和 [= 的动态版本25=] 还有。 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 的不同版本。
Will the static version of library (lstatic) loaded by lshared.so and the dynamic version (lstatic.so) conflict.
可能。
Will they share any global state.
可能。
答案取决于 exactly lshared.so
是如何构建的(它导出哪些符号),以及主要 helloworld
二进制文件是如何链接的。
答案也往往有些复杂,可能取决于内联和其他优化,也可能取决于编译器版本。
最好通过使用 lstatic.so
的共享版本来避免这样做,所有的答案都变得简单。
我只是想了解带有静态链接库的共享库的预期性能。我正在编写一个静态链接到另一个库 (lstatic) 的共享库 (lshared.so)。现在,我有另一个可执行文件 helloworld,它加载库 lstatic (lstatic.so) 和 [= 的动态版本25=] 还有。 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 的不同版本。
Will the static version of library (lstatic) loaded by lshared.so and the dynamic version (lstatic.so) conflict.
可能。
Will they share any global state.
可能。
答案取决于 exactly lshared.so
是如何构建的(它导出哪些符号),以及主要 helloworld
二进制文件是如何链接的。
答案也往往有些复杂,可能取决于内联和其他优化,也可能取决于编译器版本。
最好通过使用 lstatic.so
的共享版本来避免这样做,所有的答案都变得简单。