当昨天被Mac OS X上无法编译CoreCLR的问题困扰时(详见Mac OS X上尝试编译CoreCLR源代码),后来发现这个难题竟然被神人@kangaroo给解决了,连CoreCLR的微软开发人员也大吃一惊(详见#105)。

@kangaroo This is awesome! Thank you so much for doing it! I’ll start reviewing it in the morning.

今天发现,@kangaroo修改后可在OS X上编译的版本已被合并到CoreCLR的主分支上(详见Merge pull request #117 from kangaroo/osx),直接git签出就能编译了。如果编译时出现"not found for architecture x86_64"的错误,需要删除binaries文件夹之后重新编译。

编译成功之后,你会在 binaries/Product/amd64/debug 文件夹中看到下面三个文件:

corerun		libcoreclr.dylib	libmscordaccore.dylib

紧随编译成功的喜悦,一个冲动油然而生——用这个自己编译出来的CoreCLR运行.NET程序。

要运行.NET程序时,发现 binaries/Product/amd64/debug 中少了一个重要的文件——mscorlib.dll,不知道编译时为什么没生成。

@kangaroo也知道了这个问题,将这个文件发给了我(如果你需要,可以在这里下载),于是将这个文件复制到 binaries/Product/amd64/debug 中。

接下来是准备要运行的.NET程序,突然想到之前在阅读园子里的博文用CIL写程序:你好,沃尔德时,照着手工敲出过一段.NET控制台应用程序的IL代码(代码如下),何不就用这个呢?

.assembly extern mscorlib
{
.ver 4:0:0:0
.publickeytoken = (B7 7A 5C 56 19 34 E0 89)
}
.assembly 'HelloWorld'
{
.custom instance void class [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::'.ctor'() = (
01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78
63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) .hash algorithm 0x00008004
.ver 0:0:0:0
}
.module HelloWorld.exe
.method static void Main()
{
.entrypoint
.maxstack 1 ldstr "Hello, world!"
call void [mscorlib]System.Console::WriteLine(string) ret
}

然后用Mono的ilasm将il代码生成为程序集HelloWorld.exe:

ilasm HelloWorld.il

接着将HelloWorld.exe复制到 binaries/Product/amd64/debug 中,现在这个文件夹中就有了5个文件:

/git/dotnet/coreclr/binaries/Product/amd64/debug
HelloWorld.exe corerun libcoreclr.dylib libmscordaccore.dylib mscorlib.dll

激动人心的紧张时刻到来了,我们来用自己编译出来的CoreCLR运行HelloWorld.exe试试:

$ ./corerun HelloWorld.exe
Hello, world!

耶!成功!

虽然这只是一小步,虽然实现在Mac上开发.NET应用任重而道远,但是.NET开源带来的精彩已经到来!

在Mac OS X上用自己编译出的CoreCLR运行.NET程序的更多相关文章

  1. 在Mac上用自己编译出的DNX运行.NET程序

    DNX的全称是.NET Execution Enviroment(.NET执行环境),它是.NET跨平台的一个重要角色.如果你关注.NET的跨平台,一定要关注DNX. 由于Mono 4.0的一个bug ...

  2. Mac OS X上用CoreCLR运行一个真正的.NET控制台程序

    这个真正的控制台程序来自corefxlab,名叫CoreClrHelloWorld,是一个跨平台的.NET控制台演示程序,可以显示微软.Linux.苹果的logo. CoreClrHelloWorld ...

  3. 如何解决虚拟机Mac OS X 不支持二进制编译问题()

    本文将着重解决在使用VMware 11安装Mac OS虚拟机出现”Mac OS X 不支持二进制编译.若要运行 Mac OS X 主机上需要一个 VMware Workstation 支持英特尔 VT ...

  4. Mac OS X上尝试编译CoreCLR源代码

    CoreCLR登陆GitHub之后,体验CoreCLR首当其冲的方式就是在自己的电脑上编译它,昨天分别在Windows与Linux上成功编译了CoreCLR,详见: 1)Windows上成功编译Cor ...

  5. 如何在Mac OS X上安装 Ruby运行环境

    对于新入门的开发者,如何安装 Ruby和Ruby Gems 的运行环境可能会是个问题,本页主要介绍如何用一条靠谱的路子快速安装 Ruby 开发环境.此安装方法同样适用于产品环境! 系统需求 首先确定操 ...

  6. Mac OS X上安装 Ruby运行环境

    环境   对于新入门的开发者,如何安装 Ruby和Ruby Gems 的运行环境可能会是个问题,本页主要介绍如何用一条靠谱的路子快速安装 Ruby 开发环境.此安装方法同样适用于产品环境! 系统需求 ...

  7. Sqlite在Windows、Linux 和 Mac OS X 上的安装过程

    一:在 Windows 上安装 SQLite 1,下载 请访问SQLite下载页面http://www.sqlite.org/download.html,从Windows 区下载预编译的二进制文件.需 ...

  8. Mac OS X上使用Wireshark抓包

    Wireshark针对UNIX Like系统的GUI发行版界面采用的是X Window(1987年更改X版本到X11).Mac OS X在Mountain Lion之后放弃X11,取而代之的是开源的X ...

  9. Mac OS X 上安装 ASP.NET 5

    在Mac OS X Yosemite 10.10.3 中搭建第一个 ASP.NET 5 Web 项目 终于有时间在 Mac 上安装一下 ASP.NET 5,网上有许多教程,但是多数的时间比较早了,版本 ...

随机推荐

  1. 利用 Gulp 处理前端工作流程

    最近做项目,因为每次做完后都要手动压缩CSS.JS 等文件,压缩后另存为 *.min.xxx. Less 还要手动输入命令进行编译,调整页面也经常要手动刷新页面看效果,很麻烦,就尝试用 gulp 去处 ...

  2. 远程操控软件 TeamViewer for MAC 官方中文版11.0.55321

    百度云:https://pan.baidu.com/s/1o77ol2y 提取密码:3tsx windows: http://download.pchome.net/internet/server/r ...

  3. android自定义圆形图片和遇到的问题

    画圆遇到的问题:图片单位不一样,导致图片只能显示出圆的一部分:看代码: public class MyCircleIamge extends ImageView { private Context c ...

  4. 易语言软件加VMProtect壳的正确方法

    VMP是一款很强大的加密壳,代码虚拟化技术可以很好的保护程序不被恶意修改破J但是很多人不知道怎么给自己的程序加壳,今天给大家晋级下加壳的正确方法 相信很多新手都以为只要把软件直接拖到VMP里重新编译一 ...

  5. compile error

    stray \241     程序有非法字符,如空格,引号等,一般因为从别的地方粘贴导致这个错误.

  6. Unsupported major.minor version

    by: java.lang.UnsupportedClassVersionError: com/dayang/product/pubinfo/dao/ProPubInfoDAO : Unsupport ...

  7. device tree 生成device node 到 platform_device

    http://blog.csdn.net/lichengtongxiazai/article/details/38942033 http://blog.csdn.net/mcgrady_tracy/a ...

  8. [转]libsvm 训练后的模型参数讲解

    http://blog.sina.com.cn/s/blog_6646924501018fqc.html 主要就是讲解利用libsvm-mat工具箱建立分类(回归模型)后,得到的模型model里面参数 ...

  9. Python-dict与set

    dict(字典):用空间换取时间,占据空间大,但查询速度快,键值对(key:value),key唯一 d = {'Michael': 95, 'Bob': 75, 'Tracy': 85} 由于一个k ...

  10. machine learning----->谷歌Cloud Machine Learning平台

    1.谷歌Cloud Machine Learning平台简介: 机器学习的三要素是数据源.计算资源和模型.谷歌在这三个方面都有强大的支撑:谷歌不仅有种类丰富且数量庞大的数据资源,而且有强大的计算机群提 ...