4

新しいバージョンの libyaml-cpp を使用しようとしていますが、リンカーに問題があります ( undefined reference to 'YAML::LoadFile(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)')。

私は次のようにライブラリを構築します:

cmake -DBUILD_SHARED_LIBS=ON ..
make
sudo make install

次に、 を含めyaml-cpp/yaml.hて呼び出しますYAML::LoadFile( some_string );。私のコンパイル行は次のとおりです。

g++ -L/usr/local/lib -I/usr/local/include -lyaml-cpp -std=c++0x -o $@  $^

そこに正確なファイルを入れてみまし.soたが、うまくいきませんでした。を使用すると、共有ライブラリに関数nmが表示されます。LoadFileどういうわけか間違ったビルド ラインを使用しているのか、ライブラリに問題があるのか​​ 、今はわかりません。

4

5 に答える 5

8

コマンドラインでの順序付けの問題です。GCC コマンドライン ロジックを理解することは決してできないと思います。ライブラリを最後に置くだけでうまくいくようです:

g++ -L/usr/local/lib -I/usr/local/include -std=c++0x -o $@  $^ -lyaml-cpp
于 2014-03-03T05:33:49.963 に答える
0

私は今日の夜中ずっとこれに苦労してきました。インターネットのどこにも有用な情報が見つからなかったので、ここに結果を投稿します。

XCode (7.3) および CLang (Apple LLVM バージョン 7.3.0 (clang-703.0.29) の新しいバージョンで OSX El Capitan を使用する yaml-cpp 0.5.3 を使用する

それを機能させるために私がしたこと:

  1. インターネットから FindYamlCpp.cmake を取得します。/usr/local/share/cmake/Modules に保存します
  2. Yaml-cpp を見つけるように CMakeFiles.txt を設定します

    # YAML with yaml-cpp
    SET(YAMLCPP_STATIC_LIBRARY TRUE)
    FIND_PACKAGE(YamlCpp)
    IF(YamlCpp_FOUND)
        MESSAGE("yaml-cpp Library FOUND: yaml-cpp related sources will be built.")
    ELSEIF(YamlCpp_FOUND)
        MESSAGE("yaml-cpp Library NOT FOUND!")
    ENDIF(YamlCpp_FOUND)
    
  3. FindYamlCpp を使用するコードを src/CmakeFiles.txt に追加します。

        # Enable Yaml 
        IF(YAMLCPP_FOUND)
            ADD_EXECUTABLE(my_exec my_source.cpp)
        ENDIF(YAMLCPP_FOUND)
    
  4. たとえば、ccmake を使用します。

    1. CMAKE_MODULE_PATH を /usr/local/share/cmake/Modules に設定します
    2. CMAKE_EXEC_LINKER_FLAGS を -lyaml-cpp に設定します
于 2016-05-01T19:07:04.260 に答える
0

古いバージョンのライブラリもインストールされていますか? gcc が最初にそのバージョンを探していて、新しいバージョンを考慮していない可能性があります。

于 2014-03-03T05:24:25.007 に答える