Boost信号2未编译

时间:2018-12-21 08:47:50

标签: c++ boost compiler-errors

当我在VS中添加标题#include <boost/signals2.hpp>

即使能够找到标头,我也会遇到以下错误。

1>signals.cpp
1>c:\apps\mvs15\vc\tools\msvc\14.10.25017\include\memory(53): error C4996: 'std::uninitialized_copy::_Unchecked_iterators::_Deprecate': Call to 'std::uninitialized_copy' with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators'
1>c:\apps\mvs15\vc\tools\msvc\14.10.25017\include\memory(53): note: see declaration of 'std::uninitialized_copy::_Unchecked_iterators::_Deprecate'
1>c:\boost_1_69_0\boost\signals2\detail\auto_buffer.hpp(191): note: see reference to function template instantiation '_FwdIt *std::uninitialized_copy<I,boost::shared_ptr<void>*>(_InIt,_InIt,_FwdIt)' being compiled

我无法解决此问题。但是我的Boost.Asio库标头可以正常工作,并且代码可以编译。因此,我认为Boost安装没有问题。

Edit1:我从boost网站下载了Windows prebuild二进制文件并进行了安装。我正在使用VS2017。已将库路径添加到属性中的标头,如下所示。

  

配置属性->链接->常规->附加库   目录为C:\ boost_1_69_0 \ lib64-msvc-14.1;

     

配置属性->包含目录添加了其他文件夹   C:\ boost_1_69_0;

Edit2:通过在

中添加-D_SCL_SECURE_NO_WARNINGS解决了问题
  

配置属性-> C / C ++->命令行。

1 个答案:

答案 0 :(得分:0)

我假设您正在使用VS 2017在Windows上进行编译。

C4996实际上是警告(compiler warning C4996),不是错误,因此您可能已激活将所有警告视为错误的选项。要进行检查,请右键单击目标属性,然后展开“ C / C ++”,然后转到“常规属性”,如以下快照所示:

enter image description here

enter image description here

如果我的假设是错误的,请添加必要的信息(编译器/操作系统/您是如何获得boost的,如何正确编译的,....),以便我们找到更好的答案。

编辑: 由于您已声明未更改编译选项,因此应在源代码中的某个位置搜索#pragma warninng(error:....)的源代码。