LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: linuuxx

用c语言在linux下编译了的文件如何在windows下运行?

[复制链接]
发表于 2005-2-20 23:22:00 | 显示全部楼层
在windows下装个vmware,然后在vmware里装个linux就可以了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-2-21 09:30:37 | 显示全部楼层
Post by masterdemon
那我问你一个问题:既然是人说的话,应该不用依赖什么地方的人,直接就能被听懂,请问题你懂多少国的语言?
人发出的声音(音节)是一样的,但因语法的不同,语言也不同。
目标代码是问题也是一样的。就算是同一硬碰硬件,虽然机器指令是一样的,但执行文件对指令的组织是不同的。linux用ELF格式,Windows不是。而且一个很简单的问题就是,库函数都不一样。现在的程序不可能一次编译出完全的机器指令。而是一些调用系统底层函数库的指令。难到Windows底层也用了也有glibc?也用了linux的系统调用?



那我问你一个问题:既然是你说的话,你竟然不知你说的是什么话,还要问我你说的是什么意思??
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-2-21 09:37:26 | 显示全部楼层
近来,我反复想,原来编程的书都写错了,所谓目标代码(机器语言)是机器可直接运行,不对!应该是仍然依赖操作系统的语言,它仍然调用操作系统的命令,而不是直接可运行的,你们认为如何?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-2-21 09:47:39 | 显示全部楼层
Post by netdigger
建议楼主好好的补一下计算机基础的课。。。

另 :windows下C++编译器有VC++  VS.NET等等无数东西。。



本人近来,初步打算出一本介绍计算机基础的专著,收集一些比较关键的问题进行详细说明.

另外,看看windows下的visual studio与linux下的编译器哪个好用?
回复 支持 反对

使用道具 举报

发表于 2005-2-21 12:53:15 | 显示全部楼层
Post by linuuxx
近来,我反复想,原来编程的书都写错了,所谓目标代码(机器语言)是机器可直接运行,不对!应该是仍然依赖操作系统的语言,它仍然调用操作系统的命令,而不是直接可运行的,你们认为如何?

编程的书没有写错,只是你没有明白程序运行与系统软硬件平台的关系。一个编译成可执行文件的二进制文件通常只能在某个指定的平台上使用,因为这些程序在运行时,需要调用操作系统提供的各种系统调用,这些系统调用在另一个平台上一般是不会被支持的。Dos下的程序能在win95,win98下运行,那是因为微软出于商业考虑,提供了向后兼容性。但也不是无限的,在win2000和winXP下,就有很多dos程序运行不了。对于所谓的直接运行,只能作出狭义的理解,不能是无限制的。
回复 支持 反对

使用道具 举报

发表于 2005-2-21 16:26:05 | 显示全部楼层
不是绝对不能运行,但是必须要从系统上做些改动才行。java就是一个例子,c#将会成为另一个例子。
二进制可执行文件都是由操作系统的内核来“执行”的,而不是由硬件去“执行”,内核读出文件头,判断是否是操作系统定义的可执行文件,如果是,则把后面的二进制代码原样放入硬件的指令流队列(这个就是所谓的“直接运行”),如果不是,就给出相应的信息。
其他的原因就是连接库什么的了。
如果要细究,就不是一两篇文章能说清楚的了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-2-22 10:52:28 | 显示全部楼层
Post by cobranail
不是绝对不能运行,但是必须要从系统上做些改动才行。java就是一个例子,c#将会成为另一个例子。
二进制可执行文件都是由操作系统的内核来“执行”的,而不是由硬件去“执行”,内核读出文件头,判断是否是操作系统定义的可执行文件,如果是,则把后面的二进制代码原样放入硬件的指令流队列(这个就是所谓的“直接运行”),如果不是,就给出相应的信息。
其他的原因就是连接库什么的了。
如果要细究,就不是一两篇文章能说清楚的了。


问题基本上清晰了!就是目前还没有针对c语言的编译程序,能编译出不依赖操作系统的二进制可执行文件(目标代码),它根本就没把连接库之类的编译进去!但听说linux是用c 语言编的,不知它编译之后又是如何运行的?总不能还要依赖其他操作系统呀!


在linux编译后的可执行文件,在windows下是不是应该用debug程序运行?

linux下应该能编译java,不知能不能编译c#?(编译命令是什么?)c#与c好象区别很大?
回复 支持 反对

使用道具 举报

发表于 2005-2-22 11:37:44 | 显示全部楼层
Post by linuuxx
问题基本上清晰了!就是目前还没有针对c语言的编译程序,能编译出不依赖操作系统的二进制可执行文件(目标代码),它根本就没把连接库之类的编译进去!但听说linux是用c 语言编的,不知它编译之后又是如何运行的?总不能还要依赖其他操作系统呀!


在linux编译后的可执行文件,在windows下是不是应该用debug程序运行?

linux下应该能编译java,不知能不能编译c#?(编译命令是什么?)c#与c好象区别很大?


编译出来的代码是直接由机器执行的,并非通过操作系统。只不过编译出来的程序都必须有个文件头部,需要考虑各个段、动态库等的支持,这些是操作系统相关的。所以在Linux下编译的程序无法在Windows下直接执行(除非是交叉编译啦~~~),并非机器代码不兼容,而是可执行文件格式不兼容。

这也是操作系统发展越来越成熟的结果。像以前DOS下的COM程序,就完全不包含其他等信息,纯粹是由机器代码组成,光用debug就能写。

Linux内核就是这样的程序,不需要动态库的支持,不需要文件头部,但含有足够的代码和数据,只要Load进内存,跳转到正确位置就能执行。
回复 支持 反对

使用道具 举报

发表于 2005-2-22 11:43:20 | 显示全部楼层
Linux下想用.Net编程,需要安装mono(.Net在Linux平台的实现),编译C#的命令……忘了~~~总觉得在Linux下用.Net不伦不类的,呵呵~~~而且好像在mono下写GUI程序还跟Windows下不一样,那就没意义了。
回复 支持 反对

使用道具 举报

发表于 2005-2-22 11:49:46 | 显示全部楼层
Post by cobranail
二进制可执行文件都是由操作系统的内核来“执行”的,而不是由硬件去“执行”,


这句我不太同意,我认为操作系统只是负责加载、调度,而“执行”仍然是硬件的责任,操作系统只是只是在适当的时候介入。
回复 支持 反对

使用道具 举报

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

本版积分规则

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