昨天得知微软在GitHub上发布CoreCLR的源代码之后,立马从GitHub上签出代码,并尝试在Windows Server 2012上进行编译。
参考CoreCLR的开发者指南(Developer Guide),先安装CMake —— CoreCLR所用的开源跨平台Build工具。
然后将 C:Program Files (x86)Microsoft Visual Studio 11.0 文件夹(VS2012)中的DIA SDK文件夹复制/粘贴至 C:Program Files (x86)Microsoft Visual Studio 11.0 文件夹(VS2013)中。[注:我的电脑上安装过VS2012,现在安装有VS 2013与VS 2015 CTP 5]
然后运行VS 2013的命令行Developer Command Prompt for VS2013,进入CoreCLR代码库所在的文件夹,运行命令 build clean 进行编译。
Commencing CoreCLR Repo build Doing a clean build Checking pre-requisites... Commencing build of native components for x64/debug ...
编译了近20分钟,结果以失败告终,出现了400多个错误。大量错误都是这样的:
error C2220: warning treated as error - no 'object' file generated
在GitHub的CoreCLR Issue列表中发现有人遇到了同样的问题(Can't built, it turns out 'warning C4819' #49),CoreCLR的开发人员Matt Ellis正在努力解决,问题似乎与Windows的语言设置(system locacle)有关。我的电脑上虽然安装的是英文版Windows,但system locacle设置的是中文,见下图:
后来Matt Ellis发布了一个CoreCLR的fork解决了这个问题。
今天早上git pull coreclr发现这个修复已经合并到CoreCLR的代码库中。于是继续对CoreCLR进行Build尝试,error C2220错误消失了,但依然没有build成功,还有几十个错误。
发现其中有这样的错误:
fatal error C1083: Cannot open source file: 'C:Program Files (x86)Microsoft Visual Studio 12.0DIA SDKidldia2.idl': No such file or directory
到 C:Program Files (x86)Microsoft Visual Studio 12.0DIA SDK 中一看,只有一个bin文件夹,根本没有idl文件夹。
DIA SDK是从 C:Program Files (x86)Microsoft Visual Studio 11.0 文件夹中复制过来的,虽然安装过VS 2012,但安装VS 2013之后,将VS 2012卸载了,DIA SDK中只有bin文件夹可能与这个有关。
后来,抱着试试看的心理,到VS 2015的文件夹 C:Program Files (x86)Microsoft Visual Studio 14.0 中看了一下,也有DIA SDK文件夹,而且其中有idl文件夹。于是,将这个DIA SDK文件夹复制到 C:Program Files (x86)Microsoft Visual Studio 12.0 中重新进行build。
这次终于build成功了!可以在binariesProductx64debug文件夹中看到编译的成果。
另外,在CoreCLR的代码库中没有可供Visual Studio打开的.sln文件。后来在编译生成的binariesCMake文件夹中发现了CoreCLR.sln,用Visual Studio打开它即可。