我有一个使用Boost.Threads作为DLL(特别是Mac OS X框架)的插件架构的应用程序。我正在尝试编写一个使用Boost.Threads的插件,并希望静态链接到库中。一切都很好,但应用程序很快在我的插件中崩溃,深入Boost.Threads代码。链接到Boost.Threads的DLL版本似乎解决了这个问题,但我希望我的插件是自包含的。
是否有可能有两个Boost.Threads实例具有这样的设置(一个作为DLL,一个静态链接在另一个DLL中)?如果是这样,我可能会错过什么来使两个实例相处?
答案 0 :(得分:1)
一旦我的团队面临类似的问题。由于我此时不提及的原因,我们必须开发一个使用2个不同版本的Boost(线程,系统,文件系统)的系统。
我们提出并执行的想法是获取我们需要的两个Boost版本的源代码,然后调整其中一个以更改符号和函数名称以避免名称冲突。
换句话说,我们在源代码(或其他名称)中替换了对 bubbles 的名称 boost 的所有引用,并且还对编译进行了更改,因此它会构建 libbubbles 而不是 libboost 。
这个程序为我们提供了两组库,每个库都有自己的二进制文件和头文件。
如果查看我们应用程序的源代码,您会看到类似的内容:
#include <bubbles/thread.hpp>
#include <boost/thread.hpp>
bubbles::thread* thread_1;
boost::thread* thread_2;
我想这里的一些人已经面临类似的情况了。可能有更好的替代方案,我上面建议的那个。