1

私はこれを数日間理解しようとしてきましたが、解決策が見つからないようです。MSVS 2012 内で Windows フォーム アプリケーションを作成しています (ただし、アプリケーション自体は MSVS 2010 バイナリと .NET 4.0 を使用しています)。アプリケーションでは、CLI/CLR マネージ コードを使用する必要があります。

入門ガイドに従い、以下を使用してライブラリを構築しました。

bootstrap.bat
.\b2.exe --toolset=msvc-10.0 --build-type=complete

Visual Studio 内のプロジェクトにディレクトリをセットアップ/リンクしました。

  • C/C++ > 一般 > 追加のインクルード ディレクトリ > "C:\Program Files %28x86%29\Microsoft Visual Studio 11.0\Boost"
  • リンカー > 一般 > 追加のライブラリ ディレクトリ > "C:\Program Files %28x86%29\Microsoft Visual Studio 11.0\Boost\stage\lib"

以前にコンパイルして実行したコードに追加したものは次のとおりです。

#define BOOST_LIB_DIAGNOSTIC                 //show diagnostics
#define BOOST_USE_WINDOWS_H                  
#define BOOST_FILESYSTEM_NO_DEPRECATED       //don't use deprecated code
#include <boost/filesystem.hpp>

using namespace boost::filesystem;

ビルドの出力は次のとおりです (Release/Win32):

1>------ Build started: Project: PROJECT_NAME (Visual Studio 2010), Configuration: Release Win32 ------
1>  PROJECT_NAME.cpp
1>  Linking to lib file: libboost_filesystem-vc100-mt-1_53.lib
1>  Linking to lib file: libboost_system-vc100-mt-1_53.lib
1>PROEJCT_NAME.obj : error LNK2001: unresolved external symbol "class boost::system::error_category const & __clrcall boost::system::system_category(void)" (?system_category@system@boost@@$$FYMABVerror_category@12@XZ)
1>PROJECT_NAME.obj : error LNK2001: unresolved external symbol "class boost::system::error_category const & __clrcall boost::system::generic_category(void)" (?generic_category@system@boost@@$$FYMABVerror_category@12@XZ)
1>PROJECT_NAME.obj : error LNK2001: unresolved external symbol "void __clrcall boost::filesystem::path_traits::convert(wchar_t const *,wchar_t const *,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &,class std::codecvt<wchar_t,char,int> const &)" (?convert@path_traits@filesystem@boost@@$$FYMXPB_W0AAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABV?$codecvt@_WDH@5@@Z)
1>PROJECT_NAME.obj : error LNK2001: unresolved external symbol "public: static class std::codecvt<wchar_t,char,int> const & __clrcall boost::filesystem::path::codecvt(void)" (?codecvt@path@filesystem@boost@@$$FSMABV?$codecvt@_WDH@std@@XZ)
1>PROJECT_NAME.obj : error LNK2001: unresolved external symbol "class boost::system::error_code __clrcall boost::filesystem::detail::dir_itr_close(void * &)" (?dir_itr_close@detail@filesystem@boost@@$$FYM?AVerror_code@system@3@AAPAX@Z)
1>C:\Users\USERNAME\Documents\Visual Studio 2012\Projects\PROJECT_NAME\Release\PROJECT_NAME.exe : fatal error LNK1120: 5 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

何かを正しくビルド/リンクしていませんか? さらに情報が必要な場合はお知らせください。できる限りの情報を提供します。

4

1 に答える 1

1

古い投稿を復活させることは知っていますが、同様の問題を解決するのに長い時間を費やしたので、同様の問題に遭遇した次の人のために投稿しています.

これを機能させるには、VS2012 で Boost をビルドするか、 Teeks99またはSourceforgeからダウンロードする必要があります。VS2010で動作させることができませんでした。プロジェクト構成プロパティで、プラットフォーム ツールセットを Visual Studio 2012 (v110) に変更します。同様の問題を見つけようとしていたとき(#include <boost/filesystem.hpp>VS2010の最小限のサンプルコードで)、それはうまくいきました。共通言語ランタイム サポートが/clr(NOT /clr:pure) に設定されていることを確認します。

于 2013-11-20T13:23:49.303 に答える