当我将它从OSX移动到Ubuntu机器时,为什么必须重新编译我的C程序?

jos*_*ode 6 c macos ubuntu gcc

我在Mac(OSX)上为学校构建了一堆简单的C程序.我编译了所有程序,并在我的Mac上用Makefile对它们进行了全部测试.一切都运作良好.

为了明天准备作业,我决定通过SSH将所有这些文件(编译和源代码)传输到类网络(操作系统是Ubuntu).我想确保一切按预期工作.

一旦我转移了所有内容,当我尝试使用Emacs shell运行已编译的程序时,我收到了一个Cannot execute binary file错误.然后,一旦我通过Ubuntu机器上的SSH通过我的Makefile重新编译,它运行正常.但为什么不呢?

我知道这对你们中的一些人来说是显而易见的,但我不知道为什么编译的C程序在我的机器上运行正常,但是即使操作系统不同,也必须在不同的机器上重新编译?

以下是我的Makefile编译命令的示例:

example:    example.c
    gcc -Wall -pedantic -ansi example.c -o example
Run Code Online (Sandbox Code Playgroud)

我很擅长C(显然).这个问题,为什么我的程序在Ubuntu gcc上运行但不在OSX gcc上运行?,似乎相似,但我不明白答案.

Mar*_*ius 8

像其他提到的那样,C代码可能兼容,但Linux和OSX使用不兼容的不同二进制格式.因此,您需要重新编译才能使代码在其他平台上运行.

Linux使用称为ELF的二进制格式

OSX使用称为Mach-O的二进制格式

请参阅Linux X可执行文件与OS X"兼容"吗?进一步深入解释.