2012-01-23 122 views
0

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

+2

是的,您从静态库中使用的所有内容都会直接链接到代码中。这是你的问题吗? –

+0

还有其他的可能吗? –

回答

0

是的,这两个插件都会得到自己的静态.a库中包含的函数/符号的副本。为了在共享库或插件中使用,.a库必须是位置独立的代码,可以在编译和链接时使用-fPIC选项来实现。

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