最近在研究雷神的开源项目VideoEye,但是下载编译时用VS2013和VS2015都出现一些报错。分析是因为雷神调试的环境是VS2010,现在使用新版本VS编译时存在不兼容的问题。网上查找各种信息,最终问题得以解决,于是乎记录一下。
【背景】
项目地址 http://git.oschina.net/leixiaohua1020/VideoEye
【解决方案】
一、VS2013和VS2015均需要修改
修改方案:
1、stdafx.h
在18行添加如下代码
#include <cmath>
#include <xtgmath.h>
using namespace std;
2、ve_play.cpp
在92行:rint(double x)改为rint_1(double x)
在1763行:在两个PRId64前面分别加空格
二、VS2015
1、无法解析的外部符号
LNK2019 无法解析的外部符号 _sscanf_s
修改方案:
项目-》属性-》链接器-》输入-》附加依赖项,添加:
legacy_stdio_definitions.lib
经过上述修改后,编译通过。
三、VS2013
出现类似下面的错误
LNK2005: "void * __cdecl operator new[](unsigned int)" (??_U@YAPAXI@Z) already defined in libcpmt.lib(newaop.obj)
uafxcw.lib(afxmem.obj)
修改方案:
项目-》属性-》链接器-》输入-》忽略特定默认库,添加:uafxcw.lib;LIBCMT.lib
项目-》属性-》链接器-》输入-》附加依赖项,添加:uafxcw.lib;LIBCMT.lib
之前在电脑上乱七八糟做了各种尝试,应该是按照上面设置就可以了。
不确定有没有忽略的,后面遇到再补充吧。
四、补充VS2015编译其他项目时的问题
1、错误如下:
LNK2019 无法解析的外部符号 __imp__fprintf,该符号在函数 _ShowError 中被引用
LNK2019 无法解析的外部符号 __imp____iob_func,该符号在函数 _ShowError 中被引用
修改方案:
(1)参考二中添加legacy_stdio_definitions.lib
(2)添加如下代码
extern "C"
{
FILE __iob_func[3] = { *stdin,*stdout,*stderr };
}
2、错误如下
LNK2019 无法解析的外部符号 _Direct3DCreate9@4
解决方案:
(1)参考二的方式添加d3d9.lib