2

Visual Studio 2010 用の Windows フォーム アプリケーションに組み込みたい一連のクラスを作成しました。これらのクラスは Boost、具体的には boost::thread を利用します。

共通言語ランタイム サポートを有効にすると、次のエラー メッセージが表示されます。

1>c:\program files (x86)\boost\boost_1_47\boost\thread\win32\thread_primitives.hpp(314): error C2472: 'boost::detail::win32::interlocked_bit_test_and_set' cannot be generated in managed code: 'Found an intrinsic not supported in managed code'; compile with /clr to generate a mixed image

1>c:\program files (x86)\boost\boost_1_47\boost\thread\win32\basic_timed_mutex.hpp(160): error C2472: 'boost::detail::basic_timed_mutex::unlock' cannot be generated in managed code: 'Found an intrinsic not supported in managed code'; compile with /clr to generate a mixed image

メッセージの内容は理解できますが、対処方法がわかりません。プロジェクト プロパティで共通言語ランタイムのサポートを無効にすると、他にも多くのエラーが発生します。使用している Boost ライブラリに /clr を組み込むにはどうすればよいですか?

4

1 に答える 1

0

Boost.threadは、CLRコードと直接リンクすると機能しない、いくつかのスレッドローカルストレージ呼び出しを使用します。VS2008ではリンクは成功しますが、起動時にクラッシュします。これは同じ問題、VS2010スタイルの症状であると思われます。回避策は、boost.threadを静的にリンクするのではなく、DLLとしてビルドすることです。おそらく、その方法でリンクされます...

于 2012-06-21T14:01:27.713 に答える