現在、VS2008 で開発されたソリューションを VS2010 で構築しようとしています。設計目的のために、プロジェクトは v90 ツールセットを使用してビルドされ、v3.5 のターゲット フレームワークを持っている必要があります。変換ウィザードがインポートされたプロジェクトで完了した後、ターゲット フレームワーク/ツールセットのそれぞれをこれらの値に変更しました。プロジェクトは、次のブースト ライブラリを使用します: thread、system、regex、および date_time。VS2010 コマンド プロンプトで次のコマンドを使用して、boost_1_47 バージョンから v90 ツールセットまでこれらのライブラリをビルドしました: b2 toolset=msvc-9.0 –build-type=complete –with-'libraryname'.
ブースト ルート フォルダーへのリンクは、C++ の追加のインクルード ディレクトリで参照され、ライブラリが組み込まれたブースト ライブラリ フォルダーは、リンカーの追加のライブラリ ディレクトリで参照されます。私は32ビットプラットフォーム用に構築しています。
ソリューションのビルドを試みると、次のエラーが発生します。
Error 17 error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall boost::thread::operator struct boost::detail::thread_move_t<class boost::thread>(void)" (__imp_??Bthread@boost@@QAE?AU?$thread_move_t@Vthread@boost@@@detail@1@XZ)
Error 18 error LNK2001: unresolved external symbol "__declspec(dllimport) public: class boost::thread & __thiscall boost::thread::operator=(struct boost::detail::thread_move_t<class boost::thread>)" (__imp_??4thread@boost@@QAEAAV01@U?$thread_move_t@Vthread@boost@@@detail@1@@Z)
Error 19 error LNK1120: 2 unresolved externals
エラーの原因は、boost auto_link.hpp ファイルの次の部分で確認できると思います。
#elif defined(BOOST_MSVC) && (BOOST_MSVC == 1500)
// vc90:
# define BOOST_LIB_TOOLSET "vc90"
#elif defined(BOOST_MSVC) && (BOOST_MSVC >= 1600)
// vc10:
# define BOOST_LIB_TOOLSET "vc100"
これは、boost ライブラリとプロジェクト ファイルが v90 ツールセットに設定されているにもかかわらず、オート リンカがまだ v100 ライブラリにリンクしようとしていることを示しています。BOOST_MSVC 値がどこでどのように定義されているかはわかりませんが、これがリンカー エラーの原因であることを願っています。
プロジェクトの build.h ファイルには、次のステートメントが含まれています。
#define BOOST_ALL_DYN_LINK