使用boost示例时出现错误C4996

时间:2015-07-29 11:31:27

标签: c++ visual-studio-2012 boost

我按照他们的说明安装了Boost 1.58.0,他们在安装指南中提供的示例使用VS2012正常工作。我的OpenHV3.0.0也包含在我的属性中。我想查看一些图形函数的示例,所以我复制了这段代码:http://www.boost.org/doc/libs/1_58_0/libs/graph/example/astar_maze.cpp,并在顶部包含了stdafx.h。

编译时,我得到了

error C4996: 'std::_Fill_n': Function call with parameters that may be unsafe

其他人建议使用

#pragma warning( disable : 4996 )

似乎没有改变任何东西,或者通过属性关闭SDL检查,这会将错误变成警告,但却给我带来了更多错误,主要是LNK2005。

有关如何运行代码的任何想法?

其他信息: 关闭SDL检查时的错误类型是(我的项目是BoostExample):

error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MDd_DynamicDebug' in BoostExample.obj
error LNK2005: "public: __thiscall std::_Container_base12::_Container_base12(void)" (??0_Container_base12@std@@QAE@XZ) already defined in opencv_ts300d.lib(ts_perf.obj)
error LNK2005: ___crtSetUnhandledExceptionFilter already defined in MSVCRTD.lib(MSVCR110D.dll)

最后

fatal error LNK1169: one or more multiply defined symbols found

我想这意味着Boost通过重新定义某些内容来与OpenCV和其他DLL进行交互。我可能安装了错误的升级版本吗?我抓住了主要的一个。

1 个答案:

答案 0 :(得分:0)

链接器错误基本上告诉boost和OpenCV是使用不同的运行时设置编译的,一个用于静态lib而另一个用于DLL,并且不能混合使用。您需要重建boost和OpenCV才能使用相同的运行时设置。