2

我有一个使用 Boost.Threads 作为 DLL(特别是 Mac OS X 框架)的插件架构的应用程序。我正在尝试编写一个也使用 Boost.Threads 的插件,并希望静态链接到库中。一切正常,但应用程序很快在我的插件中崩溃,在 Boost.Threads 代码的深处。链接到 Boost.Threads 的 DLL 版本似乎可以解决问题,但我希望我的插件是独立的。

是否可以有两个具有这种设置的 Boost.Threads 实例(一个作为 DLL,一个静态链接在另一个 DLL 中)?如果是这样,我可能缺少什么来使这两个实例相处融洽?

4

1 回答 1

1

曾经我的团队遇到过类似的问题。由于我现在不会提及的原因,我们不得不开发一个使用 2 个不同版本的 Boost(线程、系统、文件系统)的系统。

我们提出并执行的想法是获取我们需要的两个 Boost 版本的源代码,然后调整其中一个以更改符号和函数名称以避免名称冲突。

换句话说,我们替换了所有对源代码中气泡(或其他名称)名称boost 的引用并且还对编译进行了更改,因此它将构建libbubbles而不是libboost

这个过程为我们提供了 2 组库,每组都有自己的二进制文件和头文件。

如果您查看我们应用程序的源代码,您会看到如下内容:

#include <bubbles/thread.hpp>
#include <boost/thread.hpp>

bubbles::thread* thread_1;
boost::thread* thread_2;

我想这里的一些人已经面临类似的情况。可能有比我上面建议的更好的选择。

于 2010-08-26T17:22:07.440 回答