Сборка с использованием 0,5 libyaml-cpp-dev завершается ошибкой с повышением

#c #cmake #yaml-cpp

Вопрос:

Я установил libyaml-cpp-dev через sudo apt install libyaml-cpp-dev и получил версию yaml-cpp 0.5, установленную на моей машине.

 dpkg -s libyaml-cpp-dev | grep Version
Version: 0.5.2-4ubuntu1
 

Используя это , я попытался создать тестовый код, demo.cpp как показано ниже:

 #include <string>
#include "yaml-cpp/yaml.h"

int main(){
  std::string config_file{"/home/freyr/exper/yamp-cpp/rvs.conf"};
  YAML::Node config = YAML::LoadFile(config_file);
  return 0;
}
 

с пирожным,

 cmake_minimum_required (VERSION 2.8.11)
project (HELLO)
find_package(yaml-cpp REQUIRED)
add_executable (helloDemo demo.cpp)
include_directories(${YAML_CPP_INCLUDE_DIRS})
target_link_libraries(helloDemo ${YAML_CPP_LIBRARIES})
 

Когда я пытался построить , я получаю ошибку ниже:

 make: Entering directory '/home/freyr/exper/yamp-cpp/build' make[1]: Entering directory '/home/freyr/exper/yamp-cpp/build' make[2]: Entering directory '/home/freyr/exper/yamp-cpp/build' Scanning dependencies of target helloDemo make[2]: Leaving directory '/home/freyr/exper/yamp-cpp/build' make[2]: Entering directory '/home/freyr/exper/yamp-cpp/build' [ 50%] Building CXX object CMakeFiles/helloDemo.dir/demo.cpp.o In file included from /usr/include/yaml-cpp/node/iterator.h:13:0,
                 from /usr/include/yaml-cpp/node/impl.h:11,
                 from /usr/include/yaml-cpp/yaml.h:17,
                 from /home/freyr/exper/yamp-cpp/demo.cpp:3: /usr/include/yaml-cpp/node/detail/iterator.h: In member function ‘void YAML::detail::iterator_base<V>::increment()’: /usr/include/yaml-cpp/node/detail/iterator.h:48:54: error: ‘next’ is not a member of ‘boost’    void increment() { this->base_reference() = boost::next(this->base()); }
                                                      ^~~~ /usr/include/yaml-cpp/node/detail/iterator.h:48:54: note: suggested alternatives: In file included from /usr/include/c  /7/bits/stl_algobase.h:66:0,
                 from /usr/include/c  /7/bits/char_traits.h:39,
                 from /usr/include/c  /7/ios:40,
                 from /usr/include/c  /7/ostream:38,
                 from /usr/include/c  /7/iostream:39,
                 from /home/freyr/exper/yamp-cpp/demo.cpp:1: /usr/include/c  /7/bits/stl_iterator_base_funcs.h:208:5: note:   ‘std::next’
     next(_ForwardIterator __x, typename
     ^~~~ In file included from /usr/local/include/boost/mpl/next.hpp:17:0,
                 from /usr/local/include/boost/mpl/bind.hpp:25,
                 from /usr/local/include/boost/mpl/lambda.hpp:18,
                 from /usr/local/include/boost/mpl/apply.hpp:25,
                 from /usr/local/include/boost/iterator/iterator_facade.hpp:36,
                 from /usr/include/yaml-cpp/node/detail/node_iterator.h:12,
                 from /usr/include/yaml-cpp/node/detail/iterator.h:12,
                 from /usr/include/yaml-cpp/node/iterator.h:13,
                 from /usr/include/yaml-cpp/node/impl.h:11,
                 from /usr/include/yaml-cpp/yaml.h:17,
                 from /home/freyr/exper/yamp-cpp/demo.cpp:3: /usr/local/include/boost/mpl/next_prior.hpp:29:8: note:   ‘boost::mpl::next’  struct next
        ^~~~ CMakeFiles/helloDemo.dir/build.make:62: recipe for target 'CMakeFiles/helloDemo.dir/demo.cpp.o' failed make[2]: *** [CMakeFiles/helloDemo.dir/demo.cpp.o] Error 1 make[2]: Leaving directory '/home/freyr/exper/yamp-cpp/build' CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/helloDemo.dir/all' failed make[1]: *** [CMakeFiles/helloDemo.dir/all] Error 2 make[1]: Leaving directory '/home/freyr/exper/yamp-cpp/build' Makefile:83: recipe for target 'all' failed make: *** [all] Error 2
 

Я вижу в последнем https://github.com/jbeder/yaml-cpp/blob/master/include/yaml-cpp/node/detail/iterator.h там нет ссылок на boost ad, все это только std c .
Как установить последнюю версию libyaml-cpp-dev, которая не имеет зависимостей от повышения ? Я не хочу создавать и устанавливать с последней версии, так как клонирование git от master каждый раз будет не очень безопасной практикой.

Ответ №1:

yaml-cpp представил зависимость boost в версии 0.5 и удалил ее в версии 0.6. Вам необходимо обновить Ubuntu до более новой версии или установить yaml-cpp из исходных текстов или установить версию yaml-cpp старше 0,5.

Смотрите: https://yaml-cpp.docsforge.com/#how-to-build

выпущен yaml-cpp 0.6.0! Для этого выпуска требуется C 11, и он больше не зависит от Boost.

См. также https://www.ubuntuupdates.org/package/core/hirsute/main/base/yaml-cpp — текущая версия yaml-cpp в Ubuntu 21.4 составляет 0.6.3-9ubuntu1

Комментарии:

1. Установка yaml-cpp из источников невозможна в некоторых установках с воздушным зазором, которые не могут клонироваться из источников yaml. Я использую Ubuntu 18.04, для которого apt получает мне libyaml-0.5, который, к сожалению, имеет зависимости от повышения. Я искал способ указать версии, с помощью которых устанавливается последний пакет. Ни одно из приложений, таких как libyaml-cpp-dev0.6 или libyaml-cpp-dev0.6.3-10, не работает.

2. Ubuntu должна иметь возможность установки (понижения до) более старых пакетов, то есть 0.4.* или более ранних.