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语言天生支持跨平台