Windows下编译运行CoreCLR

之前一直运行Corefxlab的HelloWorld失败,于是用随笔记录下自己的操作过程。

操作系统:Win8 Pro x64, 处理器AMD A8-3870。已安装VisualStudio 2013 Utimate,VisualStudio 2015 Preview。

参考文档: https://github.com/dotnet/coreclr/wiki/Developer-Guide

步骤

1. 下载cmake-3.2.0-rc2-win32-x86,安装。

2. 拉取CoreCLR最新版本。

3. 打开Developer Comand Prompt for 2014, 切换到Git/coreclr目录,type [build clean]

这次跟我在公司编译结果不一样。这次代码编译成功,Test编译失败。

错误日志为

“D:\Git\coreclr\tests\build.proj”(rebuild 目标) (1) ->
“D:\Git\coreclr\tests\src\dirs.proj”(Build 目标) (2) ->
“D:\Git\coreclr\tests\src\Regressions\assemblyref\assem.csproj”(Build 目标) (23) ->
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\AppxPackage\Microsoft.AppXPackage.Targets(451,9): error APPX1639: 未找到文件“Windows.props”。 有关详细信息,请参阅 http://go.microsoft.com/fwlink/?prd=12395&pver=1.0&plcid=0x409&ar=MSDN&sar=PlatformMultiTargeting&o1=C:\Program Files (x86)\Microsoft SDKs\Portable\v12.0&o2=Portable。 [D:\Git\coreclr\tests\src\Regressions\assemblyref\assem.csproj]

但是这次编译出来的dll似乎正常了。用Dependency查看coreclr.dll。所有依赖的dll都是x64的。仅缺少一个IESHIMS.DLL,从Windows目录下搜索到,复制到当前目录。

Dependency还报一个Warning:

Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module.

4.  尝试运行一把。Cmd下type [CoreRun test]

HOSTLOG: Host directory: D:\Git\coreclr\binaries\Product\Windows_NT.x64.debug\
HOSTLOG: CORE_ROOT not set; skipping
HOSTLOG: You can set the environment variable CORE_ROOT to point to the path
HOSTLOG: where CoreCLR.dll lives to help CoreRun.exe find it.
HOSTLOG: Attempting to load: D:\Git\coreclr\binaries\Product\Windows_NT.x64.deb
ug\CoreCLR.dll
HOSTLOG: Loaded: D:\Git\coreclr\binaries\Product\Windows_NT.x64.debug\CoreCLR.d
ll
HOSTLOG: Loading: D:\Git\coreclr\binaries\Product\Windows_NT.x64.debug\text
HOSTLOG: Finding GetCLRRuntimeHost(...)
HOSTLOG: Calling GetCLRRuntimeHost(...)
HOSTLOG: Setting ICLRRuntimeHost2 startup flags
HOSTLOG: Starting ICLRRuntimeHost2
HOSTLOG: CORE_LIBRARIES not set; skipping
HOSTLOG: You can set the environment variable CORE_LIBRARIES to point to a
HOSTLOG: path containing additional platform assemblies,
HOSTLOG: Adding assemblies from D:\Git\coreclr\binaries\Product\Windows_NT.x64.
debug\ to the TPA list
HOSTLOG: Creating an AppDomain
HOSTLOG: TRUSTED_PLATFORM_ASSEMBLIES=D:\Git\coreclr\binaries\Product\Windows_NT
.x64.debug\clretwrc.dll;D:\Git\coreclr\binaries\Product\Windows_NT.x64.debug\cor
eclr.dll;D:\Git\coreclr\binaries\Product\Windows_NT.x64.debug\dbgshim.dll;D:\Git
\coreclr\binaries\Product\Windows_NT.x64.debug\ieshims.dll;D:\Git\coreclr\binari
es\Product\Windows_NT.x64.debug\mscordaccore.dll;D:\Git\coreclr\binaries\Product
\Windows_NT.x64.debug\mscordbi.dll;D:\Git\coreclr\binaries\Product\Windows_NT.x6
4.debug\mscorlib.dll;D:\Git\coreclr\binaries\Product\Windows_NT.x64.debug\mscorr
c.debug.dll;D:\Git\coreclr\binaries\Product\Windows_NT.x64.debug\mscorrc.dll;D:\
Git\coreclr\binaries\Product\Windows_NT.x64.debug\sos.dll;D:\Git\coreclr\binarie
s\Product\Windows_NT.x64.debug\coreconsole.exe;D:\Git\coreclr\binaries\Product\W
indows_NT.x64.debug\corerun.exe;
HOSTLOG: APP_PATHS=D:\Git\coreclr\binaries\Product\Windows_NT.x64.debug\
HOSTLOG: APP_NI_PATHS=D:\Git\coreclr\binaries\Product\Windows_NT.x64.debug\NI;D
:\Git\coreclr\binaries\Product\Windows_NT.x64.debug\
HOSTLOG: NATIVE_DLL_SEARCH_DIRECTORIES=D:\Git\coreclr\binaries\Product\Windows_
NT.x64.debug\;D:\Git\coreclr\binaries\Product\Windows_NT.x64.debug\
HOSTLOG: AppDomainCompatSwitch=UseLatestBehaviorWhenTFMNotSpecified
HOSTLOG: APP_LOCAL_WINMETADATA=

Unhandled Exception: System.IO.FileNotFoundException: Could not load file or ass
embly ‘text‘ or one of its dependencies. 系统找不到指定的文件。

看起来运行时是跑起来了,这跟我上次编译结果不一样啊。难道之前是我公司机器的环境有问题?

5. 尝试跑corefxlab下的HelloWorld

https://github.com/dotnet/corefxlab

主目录下type [build]

然后分别编译NuGetTasks和HelloWorld。
运行生成的HelloWorld.exe,提示

无法启动此程序,因为计算机中丢失api-ms-win-core-localization-obsolete-|1-2-0.dll。尝试重新安装该程序以解决问题。

只好再编译corefx

https://github.com/dotnet/corefx/wiki/Developer-Guide

取出生成的package文件夹下的api-ms-win-core-localization-obsolete-|1-2-0.dll到HelloWorld目录下。再运行,还是缺dll。几番尝试,

共copy如下dll

api-ms-win-core-kernel32-legacy-l1-1-1.dll

api-ms-win-core-localization-l1-2-1.dll

api-ms-win-core-localization-obsolete-l1-2-0.dll

api-ms-win-core-stringloader-l1-1-1.dll

最终运行成功。

看来在公司运行失败确实和环境有关系吧。

6. 尝试用编译的CoreRun运行HelloWorld

试了两种方式:

1) 把编译出来的HelloWorld整个文件夹拷到CoreCLR编译出来的文件夹下。type[corerun HelloWorld\HelloWor

ld.exe],报错,原因未知。

Unhandled Exception: System.BadImageFormatException: Could not load file or asse
mbly ‘HelloWorld.exe‘ or one of its dependencies. The module was expected to con
tain an assembly manifest.

2)按照http://blogs.msdn.com/b/dotnet/archive/2015/02/03/coreclr-is-now-open-source.aspx?Redirected=true&PageIndex=2做法:

Modify CoreCLR to your heart’s content

Build CoreCLR via build.cmd x64 release

Copy the following files from coreclr\binaries\x64\release to corfxlab\demos\CoreClrConsoleApplications\HelloWorld\NotYetPackages\CoreCLR:coreclr.dll,CoreConsole.exe,mscorlib.dll

Rebuild HelloWorld.sln (either using the command line or in VS)

我也不知道意义何在,试了一把果然没效果。

总结:

还有几个问题要搞清楚:
1. 如何使HelloWorld.exe运行在自己编译出来的CoreCLR上。

2. 解决几个Test运行失败的原因。

3. 编译CoreCLR缺失的IESHIMS.DLL, 和编译HelloWorld缺失的“api-”打头的dll既然是必须的,为什么不直接在packages里提供?

时间: 2024-10-06 09:50:10

Windows下编译运行CoreCLR的相关文章

配置Windows下编译运行C/C++过程

1.首先确定电脑安装了VS或者VC++的IDE: 2.修改环境变量 在系统属性-高级-环境变量-用户变量中: 编辑PATH增加cl编译器的路径D:\Program Files\Microsoft Visual Studio 10.0\VC\bin以及MSPDB60.DLL的路径D:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE,用分号分隔. 新建变量INCLUDE:D:\Program Files\Microsoft Visual

在windows下编译运行C++

首先将VisualStudio安装目录vc中bin.lib.include目录添加到环境变量path中 遇到的问题: 1.fatal error LNK1104: cannot open file 'uuid.lib' 找到了本机uuid.lib的所在路径:C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib将它添加到系统环境变量的lib中去了以后,就解决了这个问题 2.fatal error C1034: iostream: 不包括路径

WIndows下编译libexif-0.6.21,生成VS下可用的dll和lib

1.下载libexif-0.6.21.zip 下载地址是http://sourceforge.net/projects/libexif/files/libexif/0.6.21/ 2.解压libexif-0.6.21.zip 我解压到了d:\opensources\下 3.安装Mingw 下载地址是http://www.mingw.org/ 点击右上角的Download Installer 记得安装Msys 我的安装路径是:C:\MinGW 下面依次有如下文件夹: bin include lib

在Windows下编译OpenSSL(VS2005和VC6)

需要说明的是请一定安装openssl-0.9.8a .  openssl-1.0.0我没有编译成功. 如何在Windows下编译OpenSSL (Vs2005使用Vc8的cl编译器)1.安装ActivePerl//初始化的时候,需要用到perl解释器2.使用VS2005下的Visual Studio 2005 Command Prompt进入控制台模式(这个模式会自动设置各种环境变量)3.解压缩openssl的包,进入openssl的目录4.perl configure VC-WIN32尽量在这

在Windows下编译FFmpeg详细说明

MinGW:一个可自由使用和自由发布的Windows特定头文件和使用GNC工具集导入库的集合,允许你生成本地的Windows程序而不需要第三方C运行时 MinGW,即 Minimalist GNU For Windows.它是一些头文件和端口库的集合,该集合允许人们在没有第三方动态链接库的情况下使用 GCC产生 Windows32 程序. 开发 MinGW 是为了那些不喜欢工作在 Linux(FreeBSD) 操作系统而留在 Windows 的人提供一套符合 GNU 的 GNU 工作环境. 所以

超详细Windows版本编译运行React Native官方实例UIExplorer项目(多图慎入)

转载请标明出处: http://blog.csdn.net/developer_jiangqq/article/details/50661981 本文出自:[江清清的博客] (一)前言 特别说明:群里很多童鞋都在说想Windows系统官方实例,但是官方提供的文档以及网上的例子都是OS X版本.今天特意给大家更新一下Windows版本运行官方 实例(UIExporler)全过程.俗话说学习一样新东西的时候,例如这边我们要学React Native的组件使用,那么最好的学习资料就是官方提供的材料了,

Windows下编译MySQL 5.7源代码

Windows下编译MySQL 5.7源代码   前提准备 ====== Visual Studio 2013: MySQL 5.7源代码:可以从这里下载: http://dev.mysql.com/downloads/mysql/ 下载的时候,选择Source Code 安装CMake https://cmake.org/ 安装的时候,选择在PATH中加入 安装Bison: http://gnuwin32.sourceforge.net/packages/bison.htm 安装路径不要有空格

JNI之——在cmd命令行下编译运行C/C++源文件

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46604269 一直用java来写程序,java配置好jre路径之后,在cmd下编译运行,很方便. 刚好要给一个舍友改下C程序,想到可不可以像java一样在环境变量里配置好C的编译路径呢? 于是上网搜了一下,得到如下结果: 一.如果装有VC,那就简单了,因为VC带有C的编译器,可以将此路径设置进环境变量. Windows系统下编译连接源代码方法: cl -GX test.c -GX

Skia简介以及在Windows下编译操作步骤

Skia是一个C++的开源2D向量图形处理函数库(Cairo是一个矢量库),包括字型.坐标转换.位图等等,相当于轻量级的Cairo,目前主要用于Google的Android和Chrome平台,Skia搭配OpenGL/ES与特定的硬件特征,强化显示的效果.另外,Skia是WebKit支持的众多图形平台之一,在WebKit的GraphicsContext.h/.c中有相关实现. Android与Chrome的源代码库中都有一份Skia的复制,因需求不同,做了部分的修改. Skia需要的底层库有:f