linux
linux用命令运行exe?
一、linux用命令运行exe?
EXE文件是Windows下的可执行文件,Linux需要借助一款软件(Wine),将EXE文件安装在Linux系统上运行,方法如下(以下CentOS为例子安装与使用Wine):1、安装Wine软件2、配置Wine,在"System"->"Wine Configuration",弹出窗口内选择Wine的默认模拟运行平台,一般选择"Windows XP"。3、使用Wine,在需要安装的.exe文件上右击,弹出窗口内选择“Open with wine”,接下来就和Windows系统下安装软件一样了。
二、LINUX里怎样运行exe文件?
通常情况下,任何基于Windows的exe程序都不能在LINUX下运行,这是因为它们的内核是不同的。但是可以通过在Linux上安装wine来运行exe程序。
Wine (“Wine Is Not an Emulator” 的首字母缩写)是一个能够在多种 POSIX-compliant 操作系统(诸如 Linux,macOS 及 BSD 等)上运行 Windows 应用的兼容层。Wine 不是像虚拟机或者模拟器一样模仿内部的 Windows 逻辑,而是将 Windows API 调用翻译成为动态的 POSIX 调用,免除了性能和其他一些行为的内存占用,让你能够干净地集合 Windows 应用到你的桌面。
安装 WineHQ 安装包(Ubuntu 18.04.2 64位系统为例)
如果您之前安装过来自其他仓库的 Wine 安装包,请在尝试安装 WineHQ 安装包之前删除它及依赖它的所有安装包(如:wine-mono、wine-gecko、winetricks),否则可能导致依赖冲突。
如果使用的是 64 位系统,请开启 32 bit 架构支持(如果之前没有开启的话):
# sudo dpkg --add-architecture i386
下载添加仓库密钥:
# wget -nc https://dl.winehq.org/wine-builds/winehq.keysudo
# apt-key add winehq.key
添加仓库:
# sudo apt-add-repository 'deb https://dl.winehq.org/wine-builds/ubuntu/ bionic main'
更新安装包:
# sudo apt update
安装Wine:
sudo apt install --install-recommends winehq-stable
至此wine就安装完成了。下面安装exe程序(以QQ为例)
下载以.exe为后缀的QQ可以执行文件到桌面,右击该可执行文件选择“使用其他程序打开(A)”
在弹出的对话框里选择“Wine Windows Program Loader ”
接下来就和在Windows下安装软件一样直到安装完成
注意事项:如非必要,一般不太建议在Linux上运行exe程序,可能会遇到各种各样的的Bug。
三、为什么 Linux 原生不能运行 exe 格式的文件?
有一些老师似乎告诉学生: exe 就是机器语言文件,里面存着一条一条机器指令。这么说其实不正确,因为exe 不是机器语言。正确的说法是:应该说 exe 的一部分是机器语言,或者说主要部分是机器语言。
可执行文件是有文件格式的:
微软可执行文件(*.exe)有三种格式:一种是 MS-DOS executable ,MS-DOS可执行文件,用于在 MS-DOS 操作系统中运行;另一种是 New Executable (NE),新型可执行文件,用于在 Windows 3.x 上运行;还有一种是 Portable Executable (PE),可移植可执行文件,用于在 Windows 9x 和 Windows NT 上运行。
我们现在见到的微软可执行文件,一般都是 PE 格式的,格式如下:
Mac OS X 上操作系统上的可执行文件是 Mach-O 格式,格式如下:
Linux 操作系统上的可执行文件是 Executable and Linkable Format (ELF),可执行可链接格式。格式如下:
可以看到,这里面大部分模块都是各种文件格式相关的东西,比如文件头、镜像头等等,里面存的东西是数字签名、证书、资源、时间戳等等,而不是机器语言代码。
以 PE 格式为例,这里面只有两块区域是机器语言代码:
第一块区域是 Image DOS Stub 。这是 16 位机器语言代码,用于让 DOS 操作系统在实模式(英特尔 8086 模式)下输出这句话:
This program cannot be run in DOS mode.
效果如图所示:
第二块区域是 .text 节。这是是英特尔 32 位(英特尔80386模式)的机器语言代码,用于运行常规的 Windows 程序。理论上说,只要把这块机器语言代码塞入 Mach-O 文件格式的 __TEXT
区域,就可以在 macOS 上直接运行。同样地,只要把这块机器语言代码塞入 ELF 文件格式的 .text
区域,就可以在 Linux 上直接运行。
理论上确实如此,但是实际上就没这么简单了。要说运行倒是能运行,但是刚一运行就会立刻段错误崩溃退出。因为你的 Windows 可执行文件肯定调用了大量的 Windows 动态库和 Windows API 函数。不要说你没调用,除非你直接搞 Windows 汇编语言编程,否则你不可能不调用。C语言写的 Hello World 程序,就要调用十几个 Windows API 函数了,而且至少还要调用动态库msvcrt.dll
。就说说你调用的这个printf
函数吧,这个函数在动态库msvcrt.dll
里面,而且在底层肯定要调用WriteConsole
这个 Windows API 函数才能向控制台输出文字。哪怕再退一步来说,你就算连 Hello World 都不写,只写一个空的主函数int main(void) { return 0; }
,也同样要调用十几个 Windows API 函数,因为在 main 函数运行之前还要运行mainCRTStartup
函数,而这个函数要调用一大堆 Windows API 函数。这些接口在 macOS 和 Linux 操作系统上都没有,所以肯定只能段错误崩溃退出。
当然,可执行文件的文件格式不兼容,才是不能运行最主要的原因。调用了 Windows API 和 Windows 动态库,其实是不能运行的次要原因。
当然,总有人不愿意放弃机器语言跨平台的梦想。Justine Tunney 在深入研究了 PE 、ELF、Mach-O、Shell、MBR 等等各种文件格式之后,想方设法使用各种奇技淫巧搞出既符合 PE 格式又符合 Thompson Shell 格式的文件格式。这样一来,在 Windows 上会被解析成 PE 格式来运行,在 Linux 和 macOS 上会被当作 Thompson Shell 格式来解析,然后执行一些命令之后转成 ELF 格式或 Mach-O 格式。甚至在PE格式的 Image DOS header 那里搞了一个奇技淫巧,使得这个文件符合裸机器语言格式(DOS的 *.com 格式),然后此人号称这种奇技淫巧搞出来的格式可以在 Windows、Linux 、macOS、MBR 上运行,还把这种文件格式起名为 αcτµαlly pδrταblε εxεcµταblε ,其实就是 actually portable executable ,真正的可移植可执行, 简称 APE 格式。此人还为 APE 格式写了 C 库,名叫 Cosmopolitan Libc 。
这个奇技淫巧大家看看吧。我没怎么研究过,也不想做出过多评论。
相关推荐阅读:
PE Format - Win32 appsA dive into the PE file format - PE file structure - Part 1: OverviewPE文件格式详细解析(一)aidansteele/osx-abi-macho-file-format-reference: Mirror of OS X ABI Mach-O File Format Reference (github.com)详解 Mach-O 文件结构Understanding the ELF File FormatELF 文件格式 · Linux Inside 中文版https://zhuanlan.zhihu.com/p/73114831Actually Portable Executable (justine.lol)四、怎么在linux上运行exe文件?
exe文件是Windows系统的可执行文件,无法直接在Linux系统中运行,需要在Linux中安装Wine运行环境才可以。
但是即便是安装了Wine运行环境,也只是很小一部分exe应用可以运行,大部分应用都无法正常运行。
毕竟是不同平台上的应用程序文件,文件格式都不一样,并不通用。
五、为什么linux系统不能运行exe文件?
linux下默认是无法打开exe文件,需要下载wine支持exe,但并非所有exe都可以运行的。Wine (“Wine Is Not an Emulator” 的首字母缩写)是一个能够在多种 POSIX-compliant 操作系统(诸如 Linux,Mac OSX 及 BSD 等)上运行 Windows 应用的兼容层。
输入命令winecfg,或者dash里找到winetricks,出现wine的配置界面:
六、Linux可以直接运行EXE文件吗?
exe文件执行是要依靠Windows系统的库,linux系统肯定不支持。不过如果在linux安装Wine软件,可以安装运行一般小型的Windows程序。Wine的安装;1. 安装 wine ubuntu 官方自带了 wine, 但是推荐用 winehq官方提供的最新版本 wine , 新版本解决了很多以前显得麻烦的问题。
接下来,可以打开一个终端,执行:sudo apt-get updatesudo apt-get install wine 安装完以后,用鼠标右键点击文件,选这“使用其他程序打开”,在其中选这wine就可以运行了。
七、怎么从Linux装回Windows,U盘制作工具都是exe格式,Linux运行不了此类,求解?
如果是 UEFI 的话,微软官方映像的 install.wim
/install.esd
应该是不超过 4 GiB 的,把 U 盘格式化成 FAT32 把光盘文件系统里的所有文件拖进去就可以了。
如果是 BIOS 就需要借助第三方软件了,比如 Ray 提到的 Ventoy。
关于 dd:U 盘和光盘的启动方式有差别,光盘映像要支持 dd 写入 U 盘需要做特殊处理(ISOHybrid)——
- 支持 BIOS 启动,需要在头部 512 字节内写入有效的主引导记录。(Windows 光盘映像没有,因此不支持 BIOS 启动)
- 支持 UEFI,虽然光盘的 CDFS/UDF 文件系统内已经有可启动的 EFI 文件了,但是还是需要嵌入一个隐藏的 FAT12/16/32 分区,因为 UEFI 固件一般不支持 U 盘上的 CDFS/UDF 文件系统。(Windows 光盘映像有,但不是常规的「在 CDFS/UDF 头部的预留空间里写一个 MBR 分区表」方案,因此 UEFI 启动的兼容性不好)
——简单总结就是 dd 不行。
不过 TianoCore OVMF 作为 UEFI 的参考实现,把 Windows 光盘映像写进 U 盘是完全可以正常启动的。如果某个 UEFI 固件无法启动,可以作为 bug「与参考实现不一致」反馈给主板厂商。
可以识别出 Windows 光盘映像里的隐藏分区:
也能列出启动项:
正常启动:
八、怎样在linux下运行windows下的.exe程序?
通常情况下,任何基于Windows的exe程序都不能在LINUX下运行,这是因为它们的内核是不同的。但是可以通过在Linux上安装wine来运行exe程序。
安装 WineHQ 安装包(Ubuntu 18.04.2 64位系统为例)
如果您之前安装过来自其他仓库的 Wine 安装包,请在尝试安装 WineHQ 安装包之前删除它及依赖它的所有安装包(如:wine-mono、wine-gecko、winetricks),否则可能导致依赖冲突。
如果使用的是 64 位系统,请开启 32 bit 架构支持(如果之前没有开启的话):
# sudo dpkg --add-architecture i386下载添加仓库密钥:
# wget -nc https://dl.winehq.org/wine-builds/winehq.keysudo 添加仓库:
# sudo apt-add-repository 'deb https://dl.winehq.org/wine-builds/ubuntu/ bionic main'更新安装包:
安装Wine:
至此wine就安装完成了。下面安装exe程序(以QQ为例)下载以.exe为后缀的QQ可以执行文件到桌面,右击该可执行文件选择“使用其他程序打开(A)”
在弹出的对话框里选择“Wine Windows Program Loader ”
接下来就和在Windows下安装软件一样直到安装完成注意事项:如非必要,一般不太建议在Linux上运行exe程序,可能会遇到各种各样的的Bug。参考资料:网页链接
九、手机怎么运行exe文件?
安装虚拟机软件。现在有支持运行win系统的安卓虚拟机软件。
十、exe无法运行?
可以通过修改注册表来恢复EXE文件。因为EXE文件都无法打开,所以只有先将Windows目录下的注册表编辑器“Regedit.exe”改为“Regedit.com”,然后运行它,依次找到HKEY_CLASSES_ROOT\exefile\shell\open\command,默认的键值为 “%1″ %*,双击“默认”字符串,将其数值改为“”%1″ %*”就可以了
热点信息
-
在Python中,要查看函数的用法,可以使用以下方法: 1. 使用内置函数help():在Python交互式环境中,可以直接输入help(函数名)来获取函数的帮助文档。例如,...
-
一、java 连接数据库 在当今信息时代,Java 是一种广泛应用的编程语言,尤其在与数据库进行交互的过程中发挥着重要作用。无论是在企业级应用开发还是...
-
一、idea连接mysql数据库 php connect_error) { die("连接失败: " . $conn->connect_error);}echo "成功连接到MySQL数据库!";// 关闭连接$conn->close();?> 二、idea连接mysql数据库连...
-
要在Python中安装modbus-tk库,您可以按照以下步骤进行操作: 1. 确保您已经安装了Python解释器。您可以从Python官方网站(https://www.python.org)下载和安装最新版本...