如何打包linux环境下的软件到windows中运行?


比如一直用的 prepros 软件做到了:

打包一个 ruby 2.0.0 以及一些gems sass-3.4.6 slim-2.1.0 chunky_png-1.3.3 等
并且运行良好

当然 还有一些node的库,安装的时候提示需要 node-gpy 比如:grunt-image,请问如何提取他所需要的环境并打包到windows下?

我找到了一个库 https://github.com/zhangyuanwei/node-images 他也做到了,现在的问题是如何做到的呢?

跨平台 node.js ruby windows Linux

hayzwx 11 years, 9 months ago

首先的说明,非原生的程序,也就是脚本或者Java,.NET之类的都可以直接跨平台,前提是,有对应平台的运行时或者虚拟机,或者是Host,例如nodejs之类,JavaScript一般是运行在浏览器.而nodejs也就是一个JavaScript主机,类似与Microsoft的WSCript。
所以只要有运行时什么的,打包很容易的。
就从最简单的Shell脚本来说,在Windows上有Cygwin MSYS MSYS2移植了Bash,那么shell脚本就能够在Windows上运行,同样的在Linux上,如果有cmd以及对应命令的实现,那么Batch文件就能够在Linux中执行,但是,几乎没有多少人会将批处理移植到Linux,批处理本身来说,简单,还是简单。例如PowerShell,在Windows上非常强大,有些开发者期待能够在Linux Mac上运行,所以出现了一个Pash的开源项目,基于Mono框架。项目地址: http://pash.sourceforge.net/ Github: https://github.com/Pash-Project/Pash ,Shell脚本本质上的执行是主机解析然后执行的,这种的移植只要有解释器就行,也就是'host'。

类似于Java,.NET语言,这种语言是编译型,但是生成的代码是一种虚拟机代码,JVM虚拟机,.NET虚拟机,执行的时候,虚拟机解释或者JIT,目前基本以JIT为主,这种移植的原理就得实现一个虚拟机,运行时,JIT能够把代码编译成对应的机器码。目前.NET Java都能实现跨平台。

第三种,也就是wine之类的,这个最为复杂,例如Windows 目录下的system32目录下以来的dlls,wine都得实现,wine还得让这些dlls的后端能够调用Linux的API,借口等等,对于一个PE程序,wine还得实现PE程序(.exe)的加载,环境的初始化,还得虚拟出一个Windows NT的环境,wine目前已经能有不错的效果了。对于Windows,也有人基于Cygwin实现一个能够运行linux程序的host,目前没有最新消息。

虚拟机不在本文讨论中。
未完待续。

qieyin answered 11 years, 9 months ago

Your Answer