1

プロジェクトでyaml-cpp 0.3.0を使用しようとして苦労しています.yamlをダウンロードし、http: //code.google.com/p/yaml-cpp/のようにVS 9 2008 WIN 64でビルドしました. それで、私は yaml-cpp.dll と yaml-cpp.lib を手に入れました 私は VS 2010 Express で C++ プロジェクトを持っていて、ライブラリをリンクしようとしています: 私はプロジェクトのプロパティに行きます - c/c++ general and additional include yaml-cpp ヘッダー ファイルがあるディレクトリ。次に、リンカーに移動して lib ディレクトリにパスを追加し、次にリンカーに移動して .lib ファイルを入力して追加します。次に、VC++ ディレクトリに移動し、ライブラリ ディレクトリと参照ディレクトリに lib ディレクトリへのパスを追加します。この単純なコードをビルドします。

std::ifstream fin("test.yaml");
YAML::Parser parser(fin);
YAML::Node doc;
while(parser.GetNextDocument(doc)) {
    //do nothing yet
}

次のように、いくつかのリンクの問題が発生しました。

error LNK2019: unresolved external symbol "public: __thiscall YAML::Node::Node(void)" (??0Node@YAML@@QAE@XZ) referenced in function "public: __thiscall Parser::Parser(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (??0Parser@@QAE@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)


error LNK2019: unresolved external symbol "public: __thiscall YAML::Parser::~Parser(void)" (??1Parser@YAML@@QAE@XZ) referenced in function "public: __thiscall Parser::Parser(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (??0Parser@@QAE@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)

誰でも私を助けることができますか?ここで壁に頭をぶつけています。

4

1 に答える 1

1

YAML から DLL を取得した-DBUILD_SHARED_LIBS=ONとおっしゃったように、VS2008 でビルドしたときに指定したと思われるためlib、(コンパイル時に) 静的リンクではなく、(実行時に DLL に) 動的にリンクするようになりました。

上記が正しければ、VS2008 と VS2010 の違いが問題を引き起こしている可能性があります。たとえば、こちらの投稿を参照してください。これが原因であるかどうかをすばやく確認するには、VS2010 プロジェクトのプロパティで を に設定し、Platform ToolsetそれV90が役立つかどうかを確認します。

また、同じ CPU 用に両方のプロジェクトをコンパイルしたことを確認してください。つまり、両方とも 32 ビット用、または両方とも 64 ビット用です。

于 2013-03-29T10:36:12.957 に答える