日期:2014-05-16  浏览次数:20693 次

同一段C++在Linux和windows下编译后的可执行文件有什么不同?
同一段C++在Linux和windows下编译后的可执行文件有什么不同?


比如一段非常简单的显示hello  world的代码,在linux下编译成可执行文件后和在windows下编译成可执行文件,两个文件有什么不同?


在linux下的可执行文件拷贝到windows下后还能正常运行吗?
------解决方案--------------------
绝大多数情况下是不能运行的.跨平台 跨系统 这类就是干这个的.基本上大部分东西都是和操作系统有密切关联的.
------解决方案--------------------
这要分两种情况,
1.你没有调用Linux特殊的函数库,而使用的是C/C++的标准库
这样在同样平台下能完成的工作是相同的,但是因为Linux下gcc或g++编译出的可执行文件文件头是ELF
windows下可执行文件头是PE,所以只要把Linux下编译出的可执行文件头去掉,然后加上一个PE文件头就可以在windows下跑了。
2.你调用了Linux特殊的函数(动态)库,比如包含了unistd.h等Linux系统特有的API函数库(或windows下的windows.h等等)
这样你就没法直接移植了,因为程序执行会去调用动态库的函数,Platform变了找不到就要报错。除非你能把Linux下的特有库移植到windows上去,但是这工作量。。。。
如果楼主想要了解更详细的,建议你去看看关于Linux内核的书就了解了。
------解决方案--------------------
Linux是ELF格式,Windows是PE格式,两个是不同的。直接拷贝是不行。