静态函数在共享对象的静态库中

时间:2012-01-23 17:42:26

标签: c++ static shared

我有一个使用共享对象(*.so)的应用程序作为在运行时加载的插件。我还有一个静态库(*.a),它包含一些静态函数。如果PluginA和PluginB都链接到库,他们是否也会获得自己的静态函数副本?

1 个答案:

答案 0 :(得分:0)

是的,两个插件都将获得静态.a库中包含的函数/符号的副本。要在共享库或插件中使用,.a库必须是与位置无关的代码,可以在编译和链接时使用选项-fPIC来实现。

你还必须确保PluginA和PluginB没有使用选项RTLD_GLOBAL进行dlopened(),因为PluginA和PluginB中包含的静态库的两个副本之间可能存在名称冲突。如果你在编译时动态链接PluginA和PluginB,这个名字冲突的问题在共享库中变得更加明显。