使用 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-cpp
且 Boost
安装在非标准位置的命令行:
cmake \
-DCMAKE_INSTALL_PREFIX=$PREFIX \
-DBoost_INCLUDE_DIR=$PREFIX/boost_1_55_0 \
-DBUILD_SHARED_LIBS=ON \
..
查看完整内容 conda recipe。
希望对您有所帮助。
我正在尝试在代码中使用 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-cpp
且 Boost
安装在非标准位置的命令行:
cmake \
-DCMAKE_INSTALL_PREFIX=$PREFIX \
-DBoost_INCLUDE_DIR=$PREFIX/boost_1_55_0 \
-DBUILD_SHARED_LIBS=ON \
..
查看完整内容 conda recipe。
希望对您有所帮助。