1 背景描述
最近尝试将古董级的一堆c++代码在vs2022上编译。这堆代码在Mac上和linux上可以运行,但是在windows上就会报一堆错误。迫于环境的便利性,只能硬着头皮把它一个个解决。现在解决了所有报错问题,归类一下错误,记录一下解决思路。
注:VS版本是2022社区版;windows11系统,16GB内存。
以下报错包括但不限于我推测的报错原因,仅供参考!
2 从现有代码创建VS项目
我的这堆代码中只有.h和.cpp文件,没有vs的项目文件,所有只能在这堆代码的基础上给他创建项目。
第一步:打开Visio Studio 2022,点击【继续但无需代码】
** 第二步:点击【文件】-【新建】-【从现有代码创建项目】**
** 第三步:项目类型根据代码语言选择,我选的【c++】,之后【下一步】。**
项目文件位置也就是你想存放这个vs项目的路径。
项目名称也就是你的vs项目的名称,自己随便起。
点击【添加】,把你c++代码所在目录的路径添加上去。点击【下一步】
第四步:一直点【下一步】,最后点击【完成】,就可以用你的c++现有代码创建VS项目了。
3 调试报错及解决
配置选择【Debug】、【x64】(根据自己电脑的位数选择),点击【本地Windows调试器】进行本地调试。
3.1 报错C4819
报错内容:该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为Unicode格式以防数据丢失。
报错原因:代码的注释或者输出格式中包含有中文。
方法一:在Project -> Properties -> Configuration Properties -> C/C++ -> Advance 的 Disable Specific Warnings 中添加相应的警告编号:4819。
【注】:这个方法虽然不会再报这个错,但是可能会报一些其他的格式问题,见后续。
严重性代码说明项目文件行 警告C4819该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失opencv-05d:\opencv\o_xiachong27的博客-CSDN博客(1)找出警告的文件,然后在该文件的开始处加入下面的语句:# pragma warning (disable:4819)(2)如果是 VS IDE,还可以:在Project -> Properties -> Configuration Properties -> C/C++ -> Advance 的 Disable Specific Warnings 中添加相应的警告编号:...https://blog.csdn.net/xiachong27/article/details/80420398
方法二:将代码中的中文字符改成英文,或者删除。(属于蛮力法,但是后续不会引起其他格式报错问题)
3.2 报错C2065、C2259、C2059
C2065:未声明的标志符
C2259:不能实例化抽象类
C2059:语法错误···
报错原因:这些报错大概率是由那些中文的字符引起的。
删掉或者改成英文,再次运行,这些错误就会少很多或者不会有了。
3.2 报错C2131、C3861
C2131:表达式结果不是常数
C3861:不可指定数组类型
报错原因:数组定义时数组长度用了变量。
网上一些动态数组定义方法,或者是换用vector类型来定义数组,我尝试过,但是会引起其他错误,毕竟这堆代码不是我自己写的。
考虑之后,只能从vs的扩展程序或者编译器下手。经过查找,VS中暂没找到支持C++变长数组的扩展程序,但是clang编译器是支持c++变长数组编译的。
解决:
step1:在电脑的开始菜单中搜索【Visual Studio Installer】,进入之后,点击【修改】。
step2:【使用c++的桌面开发】,右侧找到【适用于Windows的c++Clang工具】,勾选,点击【修改】,然后等待下载和安装。
step3:上一步安装完成之后,重新打开项目,在【解决方案】的界面中,选中项目,右键单击,选择【属性】。
在【配置属性】-【常规】-【平台工具集】中选择LLVM(clang-cl)。
配置好之后,再次调试,就不会出现变长数组的相关错误了。
3.3 报错undefined symbol:
报错原因:头文件中没有定义;头文件没有引用。
检查一下头文件是否在cpp文件中正确引用。如果还报错的话,可以尝试将该头文件对应的.c文件,添加到项目中,一起编译。
例如:我的头文件是sqlite3.h,正确引用了还是报错,就可以把sqlite3.c文件添加到项目中一起编译。
4 总结
我遇到的问题远远不止以上列出来的这些,甚至报错数量一开始是970个。在解决这些报错的过程中也很好的锻炼了我的程序思维和检索能力。
最初的想法是,直接粘贴报错信息去某度,但是给出的答案需要我一个一个点进去看了之后过滤,有效答案很少。然后我就沉下心看报错的内容,推测他们是由什么引起的,用这些原因去搜解决方案,效果是很明显的。
推荐使用【必应】搜索,可以减少很多垃圾信息。
版权归原作者 佩禾 所有, 如有侵权,请联系我们删除。