查看: 278|回复: 12

【新人杀手问题】第一次编译时一大堆报错问题的解决经验

[复制链接]

92

时沙

20

精华

27

主题

声望: 1206   虚弱: 0

Lv.6

万神殿炉石金鸡报晓瓦兰纳尔·远古王者之锤大咕咕幼崽

发表于 2019-8-8 17:29:32 | 显示全部楼层 |阅读模式
问题背景

编译的新手,按照论坛里的教程,一步步克隆源码,cmake布置环境,生成了项目文件,终于可以开始生成了……
结果生成结束后得到一大堆报错。

这可是相当打击人的。

第一次编译收获一大堆报错的原因可能有很多,要么就是环境没配置好,要么就是源码本身有问题。但是绝大部分人按部就班做依然报错的原因,大概都是因为编码问题。
本贴就是处理这个问题的帖子。

备注:
本帖子仅限使用Microsoft Visual Studio(以下简称VS)进行开发的情况。使用其他开发工具或者使用linux的情况并不在本帖讨论范围之内。

==================================================
处理的原理

26个英文字母和各种键盘上能找到的符号,基本上都不会带来编码问题的。会带来编码问题的只有两个地方:AZ/TC/Mangos的骚气的Logo,以及源码中的中文。不管是哪种地方,要解决的话,需要做的事都是一样的。
首先我们需要知道,Windows系统的不同语言版本有不同的系统编码,一般用的简体中文Windows的系统编码是GB2312(少数简体系统也有用其他编码的)。而VS在编译时,是统一把所有源文件当成系统编码的文件来进行处理的。也就是说,一份UTF8编码的.cpp文件,超出键盘上能直接打出来的字母和符号的部分内容,在VS眼里基本上就是乱码。所以对于AZ/TC/Mangos的Logo,还有用户自己的涉及中文的代码,编译器编译到这里的时候就会识别错误,然后报错。
然后,如果你需要在客户端中输出中文的话,还面对一个问题:在客户端中显示的内容,是Utf8编码的,但是VS处理时只能识别和处理系统编码。如果单纯只修改了源文件的编码的话,那么游戏客户端中看到的中文输出将会变成乱码。所以需要让编译器懂得把这些中文输出改为Utf8编码。

==================================================
处理的方法


要解决这个问题,需要从以下两个方面着手:
第一,直接处理。
在VS中打开你有问题的文件,然后选“文件”->“另存为”,并在“保存”按钮旁边的向下的三角形上点一下,在出来的选单里选“编码保存”。
文件-另存为-三角形-编码保存.png
选中时会提示覆盖文件,选确定继续。然后出来编码选择的画面。
点击列表,在列表中找第一个编码。
选择编码.png
第一个编码就是你的系统编码,选他就对了。并且用纸和笔(或者用手机或者电脑里的记事本程序)记下这个编码括号中的内容,这是编码的名称,等下要用到。
选择好,保存,就OK了。重新编译问题就能不报错了。
不过,这是权宜之计。如果你之后继续编辑源码,工作一段时间之后,在下次编译时会发现这个文件的编码又会自己改回来了,于是又要重复上面的动作……重复多了就会想骂娘。
所以,需要根本上解决这个问题,这就是第二个方面。
第二,根本上处理。
你需要在我的电脑里面打开源码的文件夹,找到里面一个名叫“.editorconfig”的文件。
找到editorconfig.png
你可能需要在文件夹选项中选择“显示扩展名”才能看到这个文件,否则就会看到一个文件名是空的的诡异文件。
打开之后,把里面的“charset = ”行,等于号的另一边改为刚才记下来的编码名称。
修改editorconfig.png
比如说我这里就是改为gb2312.
这个位置一般AZ是utf8,TC/AshamaneCore之类的会是latin1
改完保存,这份源码就再也不会因为编码问题编译不过了。

对于源码中的中文内容需要输出到客户端中的部分,接下来还有一步工作需要做。
打开你的包含中文的文件,在文件的开头加入一行
  1. #pragma execution_character_set("utf-8")
复制代码

一个cpp文件里面有中文,编译时必然会遇到问题.png
这一行预处理命令就是告诉编译器:“这份文件虽然用系统编码写的,但是输出时请按照Utf8编码来输出。”
加好后保存即可。

备注:
关于修改Windows系统编码的问题本帖子暂未研究。

23

时沙

0

精华

3

主题

声望: 204   虚弱: 0

Lv.2

炉石

发表于 2019-8-8 20:42:14 | 显示全部楼层
支持一下薇神

179

时沙

3

精华

10

主题

声望: 5140   虚弱: 0

Lv.6

吃瓜群众欢乐多

炉石积少成多大咕咕幼崽银色北伐军炉石天马

发表于 2019-8-8 22:21:04 | 显示全部楼层
新手的福音啊,当初就是编译时候遇到这种问题无法解决然后放弃的,非常感谢大神分享
[发帖际遇]: liuxin0893不小心把昂贵物品放入公会仓库,得到了2 声望. 幸运榜 / 衰神榜

621

时沙

0

精华

7

主题

声望: 300   虚弱: 0

Lv.3

uiwow(lulus制)炉石金鸡报晓积少成多时沙之瓶大咕咕幼崽Doge银色北伐军

发表于 2019-8-9 08:15:22 | 显示全部楼层
非常详细~~这一步难倒不知多少想入坑的新人,难得,新手的福音
[发帖际遇]: foxooo被魔能击垮,失去了圣光的信念,成为破碎者,失去1 声望. 幸运榜 / 衰神榜

121

时沙

0

精华

2

主题

声望: 602   虚弱: 0

Lv.2

炉石银色北伐军

发表于 2019-8-9 16:42:42 | 显示全部楼层
感谢大佬分享   这完全是小白福音啊   感激涕零

203

时沙

1

精华

16

主题

声望: 1218   虚弱: 0

Lv.5

炉石天马圣光永恒炉石积少成多Doge大咕咕幼崽哼哼(lulus制)银色北伐军

发表于 2019-8-9 21:42:23 | 显示全部楼层
比心。比心。比心。
[发帖际遇]: 嫂子在魔古山宝库发现大量宝箱,大肆搜刮后获得468 金币. 幸运榜 / 衰神榜

107

时沙

0

精华

5

主题

声望: 450   虚弱: 0

Lv.2

炉石银色北伐军

发表于 2019-8-10 11:23:33 | 显示全部楼层
学习了,感谢大神分享经验

123

时沙

0

精华

1

主题

声望: 251   虚弱: 0

Lv.2

炉石银色北伐军

发表于 2019-8-11 22:21:00 | 显示全部楼层
我怀着一颗感恩的心阅读
[发帖际遇]: shiwoha得到一根金属香蕉,与泰奶奶达成某种不可告人的交易,获得108 金币. 幸运榜 / 衰神榜

192

时沙

4

精华

7

主题

声望: 1382   虚弱: 0

Lv.5

炉石炉石天马大咕咕幼崽银色北伐军

发表于 2019-8-12 10:46:33 | 显示全部楼层
感谢大佬分享经验,虽然还不会编译,但学了总是好的 :lol

138

时沙

0

精华

1

主题

声望: 392   虚弱: 0

Lv.2

炉石

发表于 2019-8-12 11:08:15 | 显示全部楼层
感谢大神的教学, 回想当初编译遇到这个问题问了多少论坛, 百度了多少次, 试了多少编码格式 最终摸索出来了
您需要登录后才可以回帖 登录 | 入驻

本版积分规则

快速回复 返回顶部 返回列表