7

職場では、1.35 で正常にビルドされた MFC 拡張 DLL がありますが、1.43 でビルドすると次のエラーが発生します。

error LNK2005: __pRawDllMain already defined in ApObs.obj

BOOST_LIB_DIAGNOSTIC を有効にすると、古いビルド リストが表示されます。

linking to lib file: libboost_thread-vc71-mt-gd-1_35.lib

linking to lib file: libboost_thread-vc71-mt-gd-1_43.lib

したがって、リンクされているライブラリに変更はありません

完全なエラー メッセージは次のとおりです。

libboost_thread-vc71-mt-gd-1_43.lib(tss_pe.obj) : error LNK2005: __pRawDllMain already defined in ApObs.obj

両方のライブラリ バージョンで tss_pe.cpp の diff を実行しましたが、それらは同一であるため、何が問題なのかわかりません。

定義することでメッセージを消すことができますが、BOOST_THREAD_USE_DLLBOOST_THREAD-VC71-MT-GD-1_43.DLL を出荷する必要があるため、これが最善の解決策ではないと思います。

4

2 に答える 2

2

MFC と静的にリンクされたブースト スレッドの間には既知の非互換性があり、どちらも DllMain にフックして初期化しようとします。これはブースト 1.37 で導入されました。

boost::thread の作成者から:

DLL がアンロードされたときに、boost/thread/detail/tss_hooks.hpp の on_process_exit が呼び出されることを確認できる場合は、libs/thread/src/win32/tss_pe.cpp にパッチを適用して、_pRawDllMain の使用を削除できます。

(ただし、彼は DLL バージョンを使用することをお勧めします。)

このパッチ適用を不要にするための努力があったようですが、どうやらこれまでのところ役に立たなかったようです...

于 2012-09-02T03:02:22.313 に答える