LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1287|回复: 11

一直感觉很奇怪的问题

[复制链接]
发表于 2009-8-28 19:16:24 | 显示全部楼层 |阅读模式
在win下C语言编译生成的exe文件在linux下直接./文件名就能运行~
这个感觉很NB。
但是有的exe运行就会出错。
exe都是二进制的cpu指令,所以哪个系统都能运行?那为什么有的就有错误?
(exe指的是控制台程序,窗口程序肯定是不行的)
发表于 2009-8-29 09:33:04 | 显示全部楼层
windows编译生成的可执行文件能在linux跑起来吗?
回复 支持 反对

使用道具 举报

发表于 2009-8-29 15:08:47 | 显示全部楼层
应该是装了wine
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-8-29 20:52:24 | 显示全部楼层
不是wine
直接在目录./文件名就能运行
大家可以试下
回复 支持 反对

使用道具 举报

发表于 2009-8-29 21:45:34 | 显示全部楼层
Post by leetom;2021700
不是wine
直接在目录./文件名就能运行
大家可以试下


三楼是对的,你ps一下就会看见wine的进程了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-8-29 22:22:33 | 显示全部楼层
ms是,但是我没装wine的时候记得也可以的~
大概记错了吧。。。
回复 支持 反对

使用道具 举报

发表于 2009-8-31 14:20:50 | 显示全部楼层
二进制的文件,应该都可以运行的。

有的不能运行的原因在于:
1, 设备驱动。因为windows 和linux对同一个设备的驱动程序可能不同,所以exe这样的文件和驱动配合可能会有问题。
因为设备驱动多数是动态链接库,当exe运行的时候动态加载,其效果相当于改变了原来的exe文件,由此而引发win和linux将运行不同的exe文件,从而导致错误。
如果win下,也有类似linux下  .a 一样的可执行文件,那么这个原因应该可以避免。
2,内存。 win和linux对内存的分配不同。在那里是合法的pointer,在这里可能就是非法。

这是我的第一感觉,说的不对的地方,请多指正。


接着,我做了个实验。在linux上写了hello.c的简单程序(printf("hello\n");)。
动态载入:gcc hello.c 后,拷贝到win下运行,运行,但没有显示hello.猜测是输出到别的地方了。
位置独立的代码:gcc -fPIC hello.c 后,拷贝到win下运行,提示错误“not recognized as ...”,不可识别。
回复 支持 反对

使用道具 举报

发表于 2009-9-2 06:26:42 | 显示全部楼层
建议楼上去了解一下ELF和PE格式的区别,另外还可以看看a.out和OMF和COFF格式。由于Linux是开源的,所以凭感觉或者不可知论在这儿没市场。
回复 支持 反对

使用道具 举报

发表于 2009-9-2 10:01:18 | 显示全部楼层
Post by 没本;2022940
建议楼上去了解一下ELF和PE格式的区别,另外还可以看看a.out和OMF和COFF格式。由于Linux是开源的,所以凭感觉或者不可知论在这儿没市场。

更确切的说,在科学的研究领域,凭感觉是没有用的。
但是在艺术领域内呢,就不同了。
回复 支持 反对

使用道具 举报

发表于 2009-9-4 11:22:06 | 显示全部楼层
只会逻辑和数学,没有感性和直觉能力我觉得能有伟大的发明创造真是够呛.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表