2

現在、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

4

0 に答える 0