社区
Linux/Unix社区
帖子详情
为什么Linux下最简单的可执行文件,就不能在Windows下直接运行呢?
ladykiller136
2004-12-28 03:31:05
main()
{
printf("Test");
}
这个最简单的程序,在Linux下编译了以后,应该就已经是二进制的机器码了,而且也没调用什么Linux特有的的函数啊,是ANSI C,为什么在Window下就是不能直接运行呢?
在Window下编译的机器码和Linux下有什么本质的不同呢?
多谢!
...全文
498
19
打赏
收藏
为什么Linux下最简单的可执行文件,就不能在Windows下直接运行呢?
main() { printf("Test"); } 这个最简单的程序,在Linux下编译了以后,应该就已经是二进制的机器码了,而且也没调用什么Linux特有的的函数啊,是ANSI C,为什么在Window下就是不能直接运行呢? 在Window下编译的机器码和Linux下有什么本质的不同呢? 多谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ladykiller136
2004-12-30
打赏
举报
回复
多谢各位,极大的开阔了思路,散分了!
beepbug
2004-12-29
打赏
举报
回复
Linux的目的程序的框架结构与Windows的完全不一样。库函数的链接机制也完全不一样。
不仅如此。同是Linux,如果一台是X86机,另一台是PowerPC机,也不行的。
一个目的码要移植到另一台上运行,最最起码的两个条件:一是同一指令系统,二是同一操作系统。
转转耳朵
2004-12-29
打赏
举报
回复
打开二进制代码看看就知道,事实上这样简单的程序在做你想它做的事情之前,系统已经做了很多你所不知道的事情了。
hoyt
2004-12-29
打赏
举报
回复
我先这个就同最简单的“你好”汉语对一个不懂汉语的人来说就是听不懂的
道理一样吧。
欢迎访问我的个人网站 www.linuxc.net
superAfx
2004-12-29
打赏
举报
回复
把两个可执行文件放在一块,比较一下大小,然后用Linux的differ命令比较一下,最后在Windows下,分别用UltraEdit打开比较一下。
Windows的开头可能是4D5A,(对应ASCII码"MZ")
whoho
2004-12-29
打赏
举报
回复
可执行文件也有格式的,里面除了机器码,还有
一些特定系统设定的信息
Windows下面就有好几种Exe文件格式
如果真像楼主说的,只有指令的话,那当然可以互换的,但事实并非如此
另外,操作系统实际上是虚拟机,很多跟io有关的操作会被系统统一管理
比如Windows就不允许你直接写屏幕,你的printf要完成操作,必需通过
Win16虚拟机(又一层虚拟机),再通过windows内核,最后才能跟硬件打交道的
呵呵,看看吧
yangl2000
2004-12-29
打赏
举报
回复
windows使用的是PE文件格式,而linux是使用elf格式
X_worm
2004-12-29
打赏
举报
回复
虽然机器码可能相同但可执行文件的文件格式不同,包括启动码及配置参数。
HZHZHXCNXF
2004-12-29
打赏
举报
回复
我想
应该是操作系统的内河不一样
那么调用的函数不一样
那么实现的方法和机器指令都不一样了吧
wwayya
2004-12-28
打赏
举报
回复
可执行文件的格式是有区别的!!!!
quil
2004-12-28
打赏
举报
回复
内容也不一样!!
ladykiller136
2004-12-28
打赏
举报
回复
我是说在Linux下编译以后的可执行文件,放在Window下的使用问题
ladykiller136
2004-12-28
打赏
举报
回复
编译的可执行文件内容肯定是一样的吧,难道二进制文件从Linux转道Window读取内容就变了吗?
alpineflame
2004-12-28
打赏
举报
回复
所用编译器不一样,生成的可执行二进制代码也不一样
ladykiller136
2004-12-28
打赏
举报
回复
我想不通的就是机制怎么个不一样法,因为是在同一个机器上,他们的机器码又是一样的,
也没调用什么和操作系统相关的函数啊,为什么就不能执行呢?
quil
2004-12-28
打赏
举报
回复
二进制就一样吗?格式差远了
blder
2004-12-28
打赏
举报
回复
机制不同
实现方法:一是使用Java;二是在windows下使用Cygwin
ladykiller136
2004-12-28
打赏
举报
回复
看来问题太简单啊,可是我的确想不明白啊!
ladykiller136
2004-12-28
打赏
举报
回复
想不通啊,请大虾们多多指教啊!!
Linux
上的
可执行文件
在
Windows
上是
不能
运行
的
gcc,静态构建,elf,exe
在
Windows
上
直接
运行
Linux
,真香!
在
Windows
上
直接
运行
Linux
,真香!启用“适用于
Linux
的
Windows
子系统”功能然后去Microsoft Store搜索“
Linux
”下载安装Ubuntu 之前想要使用
Linux
系统,云服务器成本太高,虚拟机安装太消耗内存,电脑安装双系统需要频繁的切换系统,都不是很友好,现在可以
直接
在
windows
系统上安装
Linux
了,香香!! 启用“适用于
Linux
的
Windows
子系统”功能 打开设置,选择“应用” 选择“应用和功能”,点击“程序和功能” 点击“启用或关闭
Windows
功
为什么
linux
的
运行
应用程序
不能
直接
在
windows
下
运行
?
第一点
linux
和
windows
系统的格式不同,格式就是协议,就是在固定位置有意义的数据。
linux
下的可执行程序是elf ,可以使用 readelf 命令查看 elf 文件头。 而
windows
下的可执行程序是PE格式,它是一种可移植的
可执行文件
。 还有一点 因为
Linux
系统和
Windows
系统的API不同,这个API是指操作系统的API。
Linux
中的API被称为系统调用,是通过int0x80这个软中断实现的。而
Windows
中的API时放在动态链接库文件中的,也就是
Windows
开.
qt 在
windows
下编译的程序,可以
直接
在
linux
环境下
运行
吗
因为这两个操作系统使用的是不同的
可执行文件
格式和库依赖。
Windows
使用的是 PE (Portable Executable) 格式的
可执行文件
,而
Linux
使用的是 ELF (Executable and Linkable Format) 格式的
可执行文件
。然而,由于 Qt 的跨平台特性,你可以使用 Qt 的跨平台编译工具(如 qmake 或 CMake 与 Qt 的集成)在
Linux
环境下重新编译你的源代码,从而生成一个可以在
Linux
上
运行
的 ELF 格式的
可执行文件
。
为什么
Linux
和
Windows
的
可执行文件
不能
通用?
我来补充题主的问题,同样一台电脑,虽然装不同的系统,但硬件,cpu指令都是一样的。 如果一个
可执行文件
,把涉及的第三方库,系统调用,还有所有用到的API,驱动程序,统统都打进一个执行文件里。那么是不是说理论上,这个
可执行文件
在
linux
和
windows
和都可以执行? 主要的原因是格式不同和API不同,前者更重要一些。 一个可执行的二进制文件包含的不仅仅是机器指令,还包
Linux/Unix社区
23,223
社区成员
74,536
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章