当前位置: 技术问答>linux和unix
同一段C++在Linux和windows下编译后的可执行文件有什么不同?
来源: 互联网 发布时间:2017-03-20
本文导语: 同一段C++在Linux和windows下编译后的可执行文件有什么不同? 比如一段非常简单的显示hello world的代码,在linux下编译成可执行文件后和在windows下编译成可执行文件,两个文件有什么不同? 在linux下的可执行文件...
同一段C++在Linux和windows下编译后的可执行文件有什么不同?
比如一段非常简单的显示hello world的代码,在linux下编译成可执行文件后和在windows下编译成可执行文件,两个文件有什么不同?
在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内核的书就了解了。
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格式,两个是不同的。直接拷贝是不行。