linux下面写了一个hello.c程序,gcc hello.c -o hello,把hello可执行程序放在Windows下面能运行起来吗?

不能,已经编译好了呀……不同平台的编译方式是不一样的,生成的可执行文件是不一样的格式。

把源代码(hello.c)拿过来,重新编译当然可以运行在Windows下面了。(针对hello.c这个情况,并不是c/c++写的所有程序都能跨平台)。

这里就要了解一下POSIX标准接口……

例如:

#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>

int main() {
    char* s = "hello";
    write(1, s, 5);
    return 0;
}

https://bbs.csdn.net/topics/370195007

上面这段代码用了一个系统调用write,但是这段代码在windows和linux下各自编译都可以运行起来……write在windows和linux下面都是一个相同名字,相同参数的系统调用,但是内在实现的机制是不一样的,但是它们的接口是一致的!!!POSIX!!!

图片说明

图片说明

C/C++写的代码能不能跨平台编译要看具体的代码逻辑,但是已经编译好了当然是不能跨平台运行的……这个就是交叉编译,go语言我也用过交叉编译,windows下面写好的服务程序,交叉编译为linux平台的,然后丢到服务器上面去……go语言天生支持跨平台