VS2022上编译c++代码

目录

1 背景描述

2 从现有代码创建VS项目

 3 调试报错及解决

 3.1 报错C4819

3.2 报错error C2065、C2259、C2059

3.2 报错C2131、C3861

3.3 报错undefined symbol:

4 总结


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个。在解决这些报错的过程中也很好的锻炼了我的程序思维和检索能力。

最初的想法是,直接粘贴报错信息去某度,但是给出的答案需要我一个一个点进去看了之后过滤,有效答案很少。然后我就沉下心看报错的内容,推测他们是由什么引起的,用这些原因去搜解决方案,效果是很明显的。

推荐使用【必应】搜索,可以减少很多垃圾信息。

必应icon-default.png?t=M85Bhttps://cn.bing.com/

  • 6
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值