2

MSVCで言語拡張機能が無効になっている場合、次のものを含めようとすると、このエラーが発生することがわかりましたboost/thread/thread.hpp

致命的なエラーC1189:#error: "スレッドサポートが利用できません:"で明示的に無効にされていBOOST_DISABLE_THREADSます

Boostが言語拡張機能が無効になっている(_MSC_EXTENSIONS定義されていない)ことを検出すると、を定義BOOST_DISABLE_WIN32して、含めるのが安全ではないことを示しているようですwindows.h(拡張機能が有効になっていないとコンパイルされません)。

そして、その#defineの結果としてBOOST_DISABLE_THREADS、Boost.Threadはヘッダーのみのライブラリでwindows.hはなく、.cppファイルにのみ含まれているにもかかわらず、が定義されます。ヘッダーは、原則として、言語拡張なしで安全に使用できる必要があります。実際のwin32呼び出しはすべて、コンパイルされたライブラリ(.dllまたは.lib)に分離されています。

ここでは、彼らが問題を認識していることがわかりますが、過去2年間は手つかずのままであるため、迅速な修正を期待するのはおそらくナイーブです。

#ifdefいくつかの'とさまざまなBoost構成ファイルを変更するのはかなり単純なケースの#definesようですが、それらはたくさんあり、目的が明確でない多くのマクロを定義して使用しています。 。

言語拡張機能が無効になっているときにBoost.Threadヘッダーを含めることができるようにするための簡単なハックまたは回避策を知っている人はいますか?

4

1 に答える 1

2

動作をオフにする簡単な方法がわかりません。

boost \ config \ suffix.hpp(214)から始まる独自の#ifdefでブロックをラップできます。

#ifndef TEMP_HACK_DONT_DISABLE_WIN32_THREADS // XXX TODO FIXME

#if defined(BOOST_DISABLE_WIN32) && defined(_WIN32) \
   && !defined(BOOST_DISABLE_THREADS) && !defined(BOOST_HAS_PTHREADS)
#  define BOOST_DISABLE_THREADS
#endif

#endif // ndef TEMP_HACK_DONT_DISABLE_WIN32_THREADS

完全な修正ではありませんが、上流で修正できるようになるまで一時的なものにする必要があります。ブーストのものは良いですが、完璧に不変ではありません。

もちろん、上流からの分岐を見失わないように、ある種の追跡アイテムを作成してください。

于 2009-08-04T21:13:24.070 に答える