使用yaml-cpp时boost的shared_ptr问题

时间:2015-02-27 09:05:06

标签: c++11 boost cmake yaml-cpp

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

  

yaml-cpp / 0.5.1 / include / yaml-cpp / node / detail / node_ref.h:47:95:erreur:使用已删除的函数'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安装的include目录中。请参阅user744629答案下方的评论。

1 个答案:

答案 0 :(得分:1)

修改

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

原始答案

以下是我用于在非标准位置安装yaml-cpp来构建Boost的命令行:

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

查看完整的conda recipe

希望它有所帮助。