使用 yaml-cpp 时 boost shared_ptr 的问题

Problems with boost's shared_ptr when using yaml-cpp

我正在尝试在代码中使用 yaml-cpp,但出现以下错误:

yaml-cpp/0.5.1/include/yaml-cpp/node/detail/node_ref.h:47:95: erreur: use of deleted function ‘boost::shared_ptr<YAML::detail::memory_holder>::shared_ptr(const boost::shared_ptr<YAML::detail::memory_holder>&)’ void push_back(node& node, shared_memory_holder pMemory) { m_pData->push_back(node, pMemory); }

导致此错误的代码是:

#include <cstdlib>
#include <yaml-cpp/yaml.h>
int main()
{
    YAML::Emitter out;
    return EXIT_SUCCESS;
}

我尝试使用最新版本的boost来解决这个问题,但似乎没有任何改变。这是我用来安装 yaml-cpp 的 cmake 命令:

cmake -D CMAKE_INSTALL_PREFIX=/usr/local/yaml-cpp/0.5.1/ -D Boost_NO_BOOST_CMAKE=TRUE -D BOOST_ROOT=/usr/local/boost/1.57.0 -D Boost_LIBRARY_DIRS=/usr/local/boost/1.57.0/lib/ -D Boost_NO_SYSTEM_PATHS=TRUE -D CMAKE_CXX_COMPILER=/usr/local/gcc/4.8.2/bin/g++ ..
make
make install

你能帮帮我吗?

编辑:当我从编译命令行中删除 -std=c++11 标志时,问题消失了。

编辑:要解决此问题,您必须在编译命令行中输入 boost 安装的包含目录的路径。请参阅 user744629 的答案下方的评论。

编辑

正如评论所说,yaml-cpp 已正确构建和安装,但编译可执行文件需要 -I 标志以包含 Boost headers yaml-cpp构建的,否则使用了系统目录中太旧的Boost headers。

原回答

这是我用来构建 yaml-cppBoost 安装在非标准位置的命令行:

cmake \
    -DCMAKE_INSTALL_PREFIX=$PREFIX \
    -DBoost_INCLUDE_DIR=$PREFIX/boost_1_55_0 \
    -DBUILD_SHARED_LIBS=ON \
    ..

查看完整内容 conda recipe

希望对您有所帮助。