linux
LINUX里怎样运行exe文件?
一、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中怎么运行py文件?
一种方式是直接运行Python py源文件,方法是先在终端中用cd命令切换到py源文件所在的目录,然后以./文件名的方式运行py源文件(文件名前面加的是一个英文点号和一个英文斜杠,表示在当前目录下运行文件)。
但是前提是这个py源文件必须被赋予执行权限,Linux系统中只有有执行权限的文件才可以执行,即便是一个二进制文件没有可执行权限也是不能运行的,给文件添加可执行权限的命令是:chmod a+x 文件路径还有一种运行Python py源文件的方式不需要py源文件有可执行权限,方法是用Python命令加py文件名的形式来运行源文件,如果是Python 2.x的Python源文件,就用python命令执行:python 文件名;
如果是Python 3的Python源文件,就用python3命令执行:python3 文件名。
三、为什么 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下运行iso文件?
ISO文件是一种磁盘镜像文件,Linux系统里打开ISO文件,实际是挂载ISO文件。
有两种方法:
一、手工命令方式,首先确认内核加载了loop模块:modprobe loop;创建ISO文件挂载点:mkdir /media/iso;挂载ISO文件:mount your-iso-file.iso /media/iso/ -t iso9660 -o loop
二、使用辅助工具挂载ISO文件:Gmount-iso 提供图形化的界面,用户只需通过几次鼠标点击就可以在 Linux 中挂载 ISO 映像文件,非常简单和方便。
五、如何在linux下运行java文件?
以Ububtu系统为例,想要在Ubuntu上运行java程序,可以将java程序编译成功后打包,然后在Ubuntu上用命令执行jar文件。具体操作如下:
1、Windows上使用eclipse编译java工程,编译完成后导出为Runnable JAR File,如MyTest.jar。
2、Ubuntu上java环境安装:
(1)到JDK官网下载linux上使用的jdk。
(2)到eclipse官网下载linux上使用的eclipse。
(3)将jdk和eclipse上传到Linux服务器并解压,然后配置java环境变量。(eg.jdk的解压目录是/home/test)
配置方法:编辑/etc/profile文件,添加如下内容(备注:Linux中冒号:用于分隔路径,点号.表示当前目录)
export JAVA_HOME=/home/test/jdk1.8.0_65
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
编辑完成后保存文件
(4)使配置生效,命令 source /etc/profile
(5)测试环境变量是否配置成功,命令java -version。显示jdk版本,则表示java环境变量配置成功。
3、Ubuntu上执行java工程导出的jar文件。命令: java -jar MyTest.jar
六、Linux下面如何运行SH文件?
命令行下面:1.chmod空格"+x"空格你的sh文件名(+x是一个整体,不要拆开)2.输入"./你的sh文件名"即可执行举例:1chmod+xhelloworld.sh2./helloworld.sh
七、Linux系统下如何运行.sh文件?
1.如果filename.sh文件有执行权限 ./ filename.sh2.如果filename.sh文件没有执行权限 sh filename.sh
八、怎么在linux上运行exe文件?
exe文件是Windows系统的可执行文件,无法直接在Linux系统中运行,需要在Linux中安装Wine运行环境才可以。
但是即便是安装了Wine运行环境,也只是很小一部分exe应用可以运行,大部分应用都无法正常运行。
毕竟是不同平台上的应用程序文件,文件格式都不一样,并不通用。
九、Linux下怎么运行fortran程序.F文件?
首先你需要安装一款编译器,例如gfortran。
然后利用它去编译 .F 文件,得到可执行文件,例如: gfortran filename.F 最后执行这个可执行文件即可,比如: ./a.out十、为什么linux系统不能运行exe文件?
linux下默认是无法打开exe文件,需要下载wine支持exe,但并非所有exe都可以运行的。Wine (“Wine Is Not an Emulator” 的首字母缩写)是一个能够在多种 POSIX-compliant 操作系统(诸如 Linux,Mac OSX 及 BSD 等)上运行 Windows 应用的兼容层。
输入命令winecfg,或者dash里找到winetricks,出现wine的配置界面:
热点信息
-
在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)下载和安装最新版本...