C源代码经过编译后最终生成可执行文件(机器码)

时间:2022-10-18 17:10:33
如题,在网上查了下

百度上说:高级语言经编译最终生成可执行的机器码文件

wiki上说:有一些编译器输出的代码,将运行于与编译器所在相同类型的计算机和操作系统之上,这种编译器叫做本地编译器

疑问:
1.如果最终生成可执行文件里面都是机器码,也就是机器可以识别的代码,指的是指令集吗?
2.如果是cpu指令集,那么同一台X86架构的计算机装的双系统(windows,ubuntu),在windows下编译生成的文件为什么不能在ubuntu下不能运行呢?

希望有大侠指点一下,非常感谢

8 个解决方案

#1


你编完的东西实在操作系统上运行的。windows提供的系统函数和ubuntu一样么?
如果你不用操作系统提供的任何东西,那程序应该是可以在硬件上运行的。不错这也就没有为什么不能在ubuntu上运行这回事了,压根和ubuntu没任何关系。

#2


你写的是操作系统上跑的程序,不是操作系统本省。

#3


操作系统对自己可执行文件的调度方式是不一样的,参考http://www.it165.net/os/html/201409/9304.html,而Windows下的exe文件的处理又是另外一种方式。

#4


编译方式以及系统调用决定了

#5


引用 1 楼 luciferisnotsatan 的回复:
你编完的东西实在操作系统上运行的。windows提供的系统函数和ubuntu一样么?
如果你不用操作系统提供的任何东西,那程序应该是可以在硬件上运行的。不错这也就没有为什么不能在ubuntu上运行这回事了,压根和ubuntu没任何关系。


也就是说:百度上面说的生成可执行的机器语言代码,这个机器语言代码其实还是要调用操作系统的给的接口是吗?麻烦您了

#6


引用 5 楼 gscaiyucheng 的回复:
Quote: 引用 1 楼 luciferisnotsatan 的回复:

你编完的东西实在操作系统上运行的。windows提供的系统函数和ubuntu一样么?
如果你不用操作系统提供的任何东西,那程序应该是可以在硬件上运行的。不错这也就没有为什么不能在ubuntu上运行这回事了,压根和ubuntu没任何关系。


也就是说:百度上面说的生成可执行的机器语言代码,这个机器语言代码其实还是要调用操作系统的给的接口是吗?麻烦您了

是的。
其实在你代码能调系统API之前,先要系统能认识你这个文件是可执行文件,并把它执行起来。可执行文件的格式,window和linux是不一样的。

#7


底层指令相同是对的
但是在底层架构的上面还有一层操作系统层,要知道你的程序是跑在os层,而不是直接在底层架构上跑的,简单的理解就是,os是负责连接你程序和底层的架构的。

所以不同的操作系统在沟通你的程序和底层是有所不同的,造成了这种问题

#8


引用 楼主 gscaiyucheng 的回复:
如题,在网上查了下

百度上说:高级语言经编译最终生成可执行的机器码文件

wiki上说:有一些编译器输出的代码,将运行于与编译器所在相同类型的计算机和操作系统之上,这种编译器叫做本地编译器

疑问:
1.如果最终生成可执行文件里面都是机器码,也就是机器可以识别的代码,指的是指令集吗?
2.如果是cpu指令集,那么同一台X86架构的计算机装的双系统(windows,ubuntu),在windows下编译生成的文件为什么不能在ubuntu下不能运行呢?

希望有大侠指点一下,非常感谢

有空参考我的博文: http://blog.csdn.net/binaryhead/article/details/41083927,希望对你有帮助。

#1


你编完的东西实在操作系统上运行的。windows提供的系统函数和ubuntu一样么?
如果你不用操作系统提供的任何东西,那程序应该是可以在硬件上运行的。不错这也就没有为什么不能在ubuntu上运行这回事了,压根和ubuntu没任何关系。

#2


你写的是操作系统上跑的程序,不是操作系统本省。

#3


操作系统对自己可执行文件的调度方式是不一样的,参考http://www.it165.net/os/html/201409/9304.html,而Windows下的exe文件的处理又是另外一种方式。

#4


编译方式以及系统调用决定了

#5


引用 1 楼 luciferisnotsatan 的回复:
你编完的东西实在操作系统上运行的。windows提供的系统函数和ubuntu一样么?
如果你不用操作系统提供的任何东西,那程序应该是可以在硬件上运行的。不错这也就没有为什么不能在ubuntu上运行这回事了,压根和ubuntu没任何关系。


也就是说:百度上面说的生成可执行的机器语言代码,这个机器语言代码其实还是要调用操作系统的给的接口是吗?麻烦您了

#6


引用 5 楼 gscaiyucheng 的回复:
Quote: 引用 1 楼 luciferisnotsatan 的回复:

你编完的东西实在操作系统上运行的。windows提供的系统函数和ubuntu一样么?
如果你不用操作系统提供的任何东西,那程序应该是可以在硬件上运行的。不错这也就没有为什么不能在ubuntu上运行这回事了,压根和ubuntu没任何关系。


也就是说:百度上面说的生成可执行的机器语言代码,这个机器语言代码其实还是要调用操作系统的给的接口是吗?麻烦您了

是的。
其实在你代码能调系统API之前,先要系统能认识你这个文件是可执行文件,并把它执行起来。可执行文件的格式,window和linux是不一样的。

#7


底层指令相同是对的
但是在底层架构的上面还有一层操作系统层,要知道你的程序是跑在os层,而不是直接在底层架构上跑的,简单的理解就是,os是负责连接你程序和底层的架构的。

所以不同的操作系统在沟通你的程序和底层是有所不同的,造成了这种问题

#8


引用 楼主 gscaiyucheng 的回复:
如题,在网上查了下

百度上说:高级语言经编译最终生成可执行的机器码文件

wiki上说:有一些编译器输出的代码,将运行于与编译器所在相同类型的计算机和操作系统之上,这种编译器叫做本地编译器

疑问:
1.如果最终生成可执行文件里面都是机器码,也就是机器可以识别的代码,指的是指令集吗?
2.如果是cpu指令集,那么同一台X86架构的计算机装的双系统(windows,ubuntu),在windows下编译生成的文件为什么不能在ubuntu下不能运行呢?

希望有大侠指点一下,非常感谢

有空参考我的博文: http://blog.csdn.net/binaryhead/article/details/41083927,希望对你有帮助。