2017-12-30 83 views
0

私のプロジェクトでyaml-cppを使用しようとしています。私はcmakeを使って自分のプロジェクトとgamサブモジュールであるyaml-cppをビルドしています。CMake - gitサブモジュールとしての静的なyaml-cppのリンカエラー

私はコンピュータにboostライブラリを持っています(yaml-cppが必要です)。

私はそれを静的に構築しています。私の主なCMakeLists.txtにadd_subdirectoryを使用した場合、target_link_libraries(components yaml-cpp)のコンポーネントは私のプロジェクトのさまざまなモジュールで使用している静的ライブラリです)を使用してください。

私は私のソースファイルのいずれかのリンクフェーズ中にエラーがあります:私はメイク出力を確認

CMakeFiles/rsa-packer.dir/options/addObject.cpp.o : In function « YAML::detail::node& YAML::detail::node_data::get<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::shared_ptr<YAML::detail::memory_holder>) » : 
~/git/apps/rsa-packer/options/addObject.cpp:(.text._ZN4YAML6detail9node_data3getINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEERNS0_4nodeERKT_N5boost10shared_ptrINS0_13memory_holderEEE[_ZN4YAML6detail9node_data3getINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEERNS0_4nodeERKT_N5boost10shared_ptrINS0_13memory_holderEEE]+0x157) : undefined reference to: « YAML::detail::node_data::convert_to_map(boost::shared_ptr<YAML::detail::memory_holder>) » 

を、-lyaml-CPPオプションがあります。 私はそれが機能が含まれています(しかし、私は本当にnmでの出力を理解していない、libyaml-cpp.aファイルを確認:

000000000000005d r .L__PRETTY_FUNCTION__._ZN4YAML6detail9node_data14convert_to_mapESt10shared_ptrINS0_13memory_holderEE 
0000000000000940 T _ZN4YAML6detail9node_data14convert_to_mapESt10shared_ptrINS0_13memory_holderEE 

奇妙なことがある:

// this works 
YAML::Node node = YAML::Load(manifest.getStream()); 

// this does not work 
if(node["objects"]) { 
    std::cout << "no objects" << std::endl; 
} 

私ができます

しかし、私はnode["..."]を呼び出すことはできません。libに関数が見つからないからです。

このエラーの原因は何もわかりません。

問題につながるかどうかは分かりませんが、私はC++ 14でプロジェクトをコンパイルしていて、yaml-cpp libはC++ 11でビルドしています。

ありがとうございます!

答えて

0

[OK]を、私は疲れていた...

MongoDBは、すでに私のコンピュータ上のYAML-CPPをインストールしていました。私はソースファイルからコンパイルした静的ライブラリのヘッダファイルをmongodbから使用していました...ヘッダはboost::shared_ptrで関数を呼び出していましたが、ライブラリはstd::shared_ptrを使って実装しました

関連する問題