私のプロジェクトで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でビルドしています。
ありがとうございます!