0

私はこれに困惑しています。

Win7 x64 でコンパイルしようとしているクロスプラットフォーム コードがいくつかあります。コードは Boost 1.54.0、具体的には boost::filesystem ライブラリを使用しています。

filesystem::path に文字列を割り当てようとしたときのいくつかの関数呼び出しを除いて、私のコードの大部分はコンパイルされます。

たとえば、次のような単純なことをするとします。

string path = (char *)"/This/Is/A/Fake/Path";
filesystem::path boostpath = path;

リンク段階で次のようになります。

LNK2001: unresolved external symbol "void __cdecl boost::filesystem::path_traits::convert(unsigned short const *,unsigned short const *,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &,class std::codecvt<unsigned short,char,int> const &)" (?convert@path_traits@filesystem@boost@@$$FYAXPEBG0AEAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEBV?$codecvt@GDH@5@@Z)

何が原因なのかわかりません。他のブースト ライブラリ (およびファイルシステム コール) は問題なく動作します。私が思いつく唯一のことは、Wide Characters と Windows で何かが起こっているということです。stackoverflow を検索しても、何も見つかりませんでした。リンク エラー自体は、文字列変換に関連しているようです。

当然、これは Linux/MacOSX で動作します。

前もって感謝します!

ボブ。

4

1 に答える 1

1

/Zc:wchar_t- スイッチで動作するようになりました。これには、「msvc.jam」ファイルの編集が含まれていました。このファイルは、ブースト ソース フォルダーにあります。

パスは次のとおりです: your-boost-path /boost_1_54_0/tools/build/v2/tools/msvc.jam

/Zc:wchar_tフラグを立てるwchar_t を検索しました。フラグを/Zc:wchar_t-に変更して変更しました。

更新された行は次のようになります。

 toolset.flags $(toolset).compile CFLAGS $(conditions) : /Zc:forScope /Zc:wchar_t- ;

次に、次のコマンド ラインを使用して boost をコンパイルしました。(これらのフラグは、特に自分のニーズに合わせて使用​​しました。)

bjam --toolset=msvc-10.0 architecture=x86 threading=multi link=static address-model=64 --build-type=complete install --prefix=C:\local\boost

コンパイルしたら、プロジェクトを試してみましたが、うまくいくようです! まだ本格的なテストは行っていませんが、コンパイルできるようです。

注: wchar_t フラグを切り替えると、多くのコンパイラ警告が発生し、いくつかのエラーが発生しました。オファーを後押しするすべてのパッケージを使用しているわけではありませんが、必要なものがすべて揃っていることを願っています.

ボブ..

于 2013-11-19T17:51:41.773 に答える