LinuxSir.cn,穿越时空的Linuxsir!

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

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

[复制链接]
发表于 2006-6-15 18:02:01 | 显示全部楼层
操作系统还是用C编写的,但是核心部分只能用汇编。当然如果你愿意,全用汇编更好,不过,程序编写的工作量麻,呵呵…………至于用C写的那些代码,是不应该有“操作系统调用”之类的库函数的,应该都是直接对硬件操作或者BIOS的功能调用函数。
回复 支持 反对

使用道具 举报

发表于 2006-6-15 18:16:20 | 显示全部楼层
别怪我刨根问底,既然是用汇编、c,那他用什么编译?关键的是在什么环境下作这些工作呀?既然些的是操作系统,难道还需要一个其他操作系统作环境吗?

好像是鸡和蛋的问题,呵呵。
回复 支持 反对

使用道具 举报

发表于 2006-6-15 18:16:48 | 显示全部楼层
补充一下,当然这只是个人观点:我觉得从理论上将,其实任何任何语言都可以用来写操作系统,只是编译生成可执行机器码时,必须把调用的各种系统函数和库都用最终的机器码实现出来,并封装、链接到一起。例如我用basic这样的解释语言写个操作系统,那么在生成最终机器码时,必须包含有basic的解释器、解释器用到的相关dos系统调用部分的二进制机器码,再有就是dos如何执行和管理程序,如何分配内存管理硬件等等各个方面的二进制机器码,总之所有要使用的,只要不是直接针对硬件和bios的操作部分的调用和实现都把它的最终的机器码统一链接进最终文件去,这样一层一层的链接、封装,直到最底层的针对硬件和bios机器码,应该就可以运行了。姑且不论这个操作系统的效率,就是这个链接封装的过程的工作量,估计就大得惊人,没人愿意这么做。

以上纯粹个人的认识和理解,欢迎批评指正。
回复 支持 反对

使用道具 举报

发表于 2006-6-16 00:02:01 | 显示全部楼层
Post by youxiazhu
真把我当成傻子了,哈哈。不管怎么说,您还没有正面回答我的问题呀?
其实是没把你傻子才只是提醒一下,以为剩下的你都能明白。因为简单地讲,就是“编译”可以使用其它的系统、工具,“运行”时不可以。
其实这个问题,跟编译器相似,有个自举的问题。
你想想,C编译器是怎么写的?还不是C,那么第一个C编译器呢,当然是其它的语言了。
所以,现在的操作系统编写,都是在已有的系统上编写,至于最初的系统是怎么来的,翻翻操作系统发展历史的书籍吧。
回复 支持 反对

使用道具 举报

发表于 2006-6-16 08:07:21 | 显示全部楼层
虽然pupilzeng的话有点呛人,不过讲解地还是蛮细致的,我喜欢!
多少有些了解,正如你所说,还是翻翻书吧。



谢谢啊!
回复 支持 反对

使用道具 举报

发表于 2006-6-16 09:28:51 | 显示全部楼层
请大家想一下,操作系统是怎么编译出来的?

   GCC能够编译出"无需操作系统"的二进制代码,但是这种"绝对机器"的代码不包含操作系统能识别并用来装载的程序映像头部,所以不能在Linux/Windowz下运行.也正因为如此,所以它能在裸机上奔腾(简称"裸奔").
回复 支持 反对

使用道具 举报

发表于 2006-6-17 14:08:10 | 显示全部楼层
给点实际的建议吧

http://ricardo.ecn.wfu.edu/~cottrell/cross-gtk/

这个网页研究一下,谁搞定了些个中文说明,或者rpm直接安装包,就好了
回复 支持 反对

使用道具 举报

发表于 2006-6-17 23:06:34 | 显示全部楼层
.net平台好像可以实现楼主说的功能。
回复 支持 反对

使用道具 举报

发表于 2006-6-17 23:38:52 | 显示全部楼层
Post by pupilzeng
其实是没把你傻子才只是提醒一下,以为剩下的你都能明白。因为简单地讲,就是“编译”可以使用其它的系统、工具,“运行”时不可以。
其实这个问题,跟编译器相似,有个自举的问题。
你想想,C编译器是怎么写的?还不是C,那么第一个C编译器呢,当然是其它的语言了。
所以,现在的操作系统编写,都是在已有的系统上编写,至于最初的系统是怎么来的,翻翻操作系统发展历史的书籍吧。


这位兄台关于语言的发明和编译器是如何写出来的观点有一点点问题。

计算机语言的编译器分为自编译型和非自编译型。
自编译型就是你自己定义了一个语法,然后根据这个语言的产生式产生出来一个有效的句子,这个句子当然是能有一定功能的。然后自己把这个句子翻译成一段汇编程序,那么你的这个句子就有了能力去完成它的功能。
然后你后面的句子,可以用到前面生面的句子的功能,来进一步解释新生成的句子的语义。那么这样就慢慢地把编译器完成了,就象修楼房一样,是一点一点垒起来的。。

非自编译型就是编译器的内核部分的词法分析器,语法分析器,语义分析器都是别的语言完成的,这个编译器然后再来编译自己的语言。
回复 支持 反对

使用道具 举报

发表于 2006-6-18 18:58:50 | 显示全部楼层
Post by Changyp
这位兄台关于语言的发明和编译器是如何写出来的观点有一点点问题。

计算机语言的编译器分为自编译型和非自编译型。
自编译型就是你自己定义了一个语法,然后根据这个语言的产生式产生出来一个有效的句子,这个句子当然是能有一定功能的。然后自己把这个句子翻译成一段汇编程序,那么你的这个句子就有了能力去完成它的功能。
然后你后面的句子,可以用到前面生面的句子的功能,来进一步解释新生成的句子的语义。那么这样就慢慢地把编译器完成了,就象修楼房一样,是一点一点垒起来的。。

非自编译型就是编译器的内核部分的词法分析器,语法分析器,语义分析器都是别的语言完成的,这个编译器然后再来编译自己的语言。

呵呵,当时回复也没仔细想,以为会没人这个认真的,所以说得就不严谨了。
不过,你说的自编译型的那个,我还真没有见过,也没大看明白。当初学编译原理的时候,也没怎么学好。:%
回复 支持 反对

使用道具 举报

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

本版积分规则

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