CMake — ошибка компоновщика со статическим yaml-cpp в качестве подмодуля git

Я пытаюсь использовать YAML-каст в моем проекте. Я использую cmake для сборки своего проекта и yaml-cpp, который является подмодулем git в моем проекте.

У меня на компьютере есть библиотека boost (требуется для yaml-cpp).

Я строю это статически. С помощью add_subdirectory в моем основном CMakeLists.txt, а затем с помощью 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>) »

Я проверил вывод make, есть опция -lyaml-cpp.
Я проверил файл 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;
}

Я могу построить объект узла, используя YAML::Load функция, которая работает и находится в статической библиотеке.

Но я не могу позвонить node["..."] потому что функция не найдена в lib.

Я понятия не имею, что вызывает эту ошибку.

Я не знаю, может ли это привести к проблемам, но я компилирую свой проект на C ++ 14, а библиотека yaml-cpp создается с использованием c ++ 11.

Спасибо!

0

Решение

Хорошо, я устал

mongodb уже установил yaml-cpp на мой компьютер. Я использовал файлы заголовков из mongodb со статической библиотекой, которую я только что скомпилировал из исходников … Заголовок вызывал функцию с boost::shared_ptr и моя библиотека была реализована с использованием std::shared_ptr

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]