博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在Mac OS X上用自己编译出的CoreCLR运行.NET程序
阅读量:6767 次
发布时间:2019-06-26

本文共 1727 字,大约阅读时间需要 5 分钟。

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

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

今天发现,@kangaroo修改后可在OS X上编译的版本已被合并到CoreCLR的主分支上(详见),直接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程序,突然想到之前在阅读园子里的博文时,照着手工敲出过一段.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/debugHelloWorld.exe		corerun			libcoreclr.dylib	libmscordaccore.dylib	mscorlib.dll

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

$ ./corerun HelloWorld.exeHello, world!

耶!成功!

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

转载于:https://www.cnblogs.com/dudu/p/mac-os-x-coreclr-hello-world.html

你可能感兴趣的文章
Eclipse快捷键指南
查看>>
160824华为Mate7创建一键锁屏快捷方式
查看>>
公司内部系统的网络映射设置问题
查看>>
2010年05月15-16日在宁波实施小额外贸网站B2C、商品展示网站心得体会总结
查看>>
【MySQL优化】优化Linux读取性能,不使用atime属性
查看>>
windows注册表
查看>>
质点碰撞和卢瑟福公式
查看>>
web服务器性能概述
查看>>
flash调用js后,textbox中不能切换输入法的问题
查看>>
内存数据库Tokyo Cabinet在电子商务网站中的应用
查看>>
mysql数据库存储引擎(1)
查看>>
Linux中apache的配置
查看>>
网络的高可用性
查看>>
《Zabbix-ICMP ping监控添加方法》-7
查看>>
打印机常见问题与解决方法
查看>>
Django在根据models生成数据库表时报
查看>>
数据结构之链表
查看>>
hica快速通过指南
查看>>
RabbitMQ关键性问题调研
查看>>
oracle字符集
查看>>