现在大家的生活办公已经离不开电脑了,在经常和电脑打交道的小伙伴会发现,Linux原生不能运行exe格式的文件。

因为exe里面存放的符号地址linux是不认的,在转化成机器码这一步,printf的地址已经被焊死了。而 windows的 printf位于 msvcrt.dll而不是 linux下的 libc.so.6,所以地址必然不同。巨硬搞linux的程序在windows上跑肯定容易,毕竟windows和linux对巨硬来说是透明的,反过来的事,巨硬肯定不可能干砸自己饭碗的事,民间搞的话也就只有linux透明。

wsl其实是起了个虚拟机,除了api,syscall层面的东西,还依赖最底层的driver,dev。所以一般的应用程序可以直接跑,依赖driver的程序比如cuda一直还支持不了,除了GNU是开始如此的,其他的都是后改的。Wine最开始就是WindowsEmulator的缩写,PHP最开始也是PersonalHomePage的缩写,但是后来功能逐渐和全称字面意思脱离,于是就改了。

计算机硬件是由操作系统OS管理的,你可以理解exe或者app是由操作系统控制的一个动态模块。因此一个app的加载运行,申请资源,最后退出清理全部必须由OS进行调配。

EXE程序在Linux上直接运行的最大障碍是在于其依赖的一系列动态库,如果程序依赖于一些奇怪版本的.netframework的话在非特定版本windows上运行都会有困难,更别提可能牵涉到的第三方库了。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。