【发布时间】:2016-11-18 20:53:10
【问题描述】:
我有一组应用程序插件,它们都链接到一个公共基础库。基础库定义了一个单例,它维护每个插件中所有对象构造函数的列表。
在 Windows 上,我可以将此基础库创建为静态库,因此在每个插件中都放置了一个单例副本。 但是在 Linux 上我有一点相反的问题as this fellow.
到目前为止,我已经尝试了以下方法:
- 将基础构建为共享库(根据原作者)
- 使用 -fPIC 将基础构建为静态
- 使用 -fPIC 将基础构建为静态,在 CMake 中显式删除 -rdynamic
我真的很想保持程序结构与现在相同,方法是将单例定义驻留在基础库中,以便每个插件都有自己的实例。我已经尝试将定义移动到每个插件中,但我真的很想避免这种情况。 本质上,我想重现他认为的错误。然而,他将他的单例完全定义在一个头文件中,这对我来说很有意义,每个插件都有自己的类实例化,另一方面,我将单例的定义编译到基础库中。
【问题讨论】:
标签: c++ linux linker shared-libraries