2

Boost.Threads を DLL (具体的には Mac OS X フレームワーク) として使用するプラグイン アーキテクチャを持つアプリケーションがあります。Boost.Threads も使用するプラグインを作成しようとしており、ライブラリに静的にリンクしたいと考えています。すべて正常にビルドされますが、プラグインの Boost.Threads コードの奥深くで、アプリケーションがすぐにクラッシュします。Boost.Threads の DLL バージョンにリンクすると問題が解決するようですが、プラグインを自己完結型にしたいと考えています。

このようなセットアップで Boost.Threads の 2 つのインスタンスを使用することは可能ですか (1 つは DLL として、もう 1 つは別の DLL に静的にリンクされています)。もしそうなら、2つのインスタンスをうまくやっていくために何が欠けているのでしょうか?

4

1 に答える 1

1

私のチームが同様の問題に直面したことがあります。現時点では言及しない理由により、Boost の 2 つの異なるバージョン (スレッド、システム、ファイルシステム) を使用するシステムを開発する必要がありました。

私たちが思いつき実行したアイデアは、必要な Boost の両方のバージョンのソース コードを取得し、そのうちの 1 つを微調整してシンボルと関数名を変更し、名前の衝突を回避することでした。

つまり、ソース内のバブルの名前boostへのすべての参照(または他の名前) を置き換え、 libboost の代わりに libbubbles をビルドするようにコンパイルを変更まし

この手順により、それぞれ独自のバイナリとヘッダー ファイルを持つ 2 セットのライブラリが得られました。

アプリケーションのソース コードを見ると、次のようになります。

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

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

ここにいる何人かは、すでに同様の状況に直面していると思います。上記で提案したものよりも優れた代替手段がおそらくあります。

于 2010-08-26T17:22:07.440 に答える