前言:
由于最新项目中要应用语音识别的功能,考虑到调用百度语音的接口。但是百度语音接口要求使用C++11的规范,而我们当前项目是在Vs2010的基础上开发的。众所周知,Vs2010对C++11的支持是很有限的,所以就花费了点时间把项目移植到Vs2017上。期间也遇到了不少问题,记录下,可能不太详尽,勿怪。
1、Vs2017打开Vs2010的工程,会提示工具集升级,确定即可。大部分程序都是可以直接移植的,如有问题请继续。
2、重写虚函数限制性规范比基类少
虚函数已被重写,但在/Za,则重写函数具有限制性较少异常规范。
// C2694.cpp
// compile with: /Za /c
class MyBase {
public:
virtual void f(void) throw(int) {
}
};
class Derived : public MyBase {
public:
void f(void) throw(...) {} // C2694
void f2(void) throw(int) {} // OK
};
3、msvcrt.lib与其他库的使用冲突
项目属性--链接器--输入:/nodefaultlib:msvcrt.lib
其他类似的错误都可以这样添加命令
4、error C2220:警告被视为错误 - 没有生成 “object”文件
项目属性--C++--常规:警告视为错误改为否
5、error C1189:Macro definition of snprintf conflicts with Standard Library function declaration
#define snprintf _snprintf
替换为
#if defined(_MSC_VER) && _MSC_VER<1900
# define snprintf _snprintf
#endif
6、imp_strncpy无法解析的外部符号
此类错误都是找不到函数入口导致的,确认是否添加对应lib文件或是dll即可
7、项目中如果有内部调用的lib文件,需要在Vs2017下重新编译生成,然后再调用。另外需要注意,对于Vs2010转Vs2017,lib文件也需要从Vs2010升级到Vs2017后编译,而不能是Vs2012升级到Vs2017后编译,否则会出现链接错误。
暂时都这样~
本文由VS软件圈(vssoft.net)发布,不代表VS软件圈立场,转载联系作者并注明出处:https://vssoft.net/vsazwt/VS2010anzhuangwenti/2020/0727/5798.html