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上运行?,似乎相似,但我不明白答案.
像其他提到的那样,C代码可能兼容,但Linux和OSX使用不兼容的不同二进制格式.因此,您需要重新编译才能使代码在其他平台上运行.
Linux使用称为ELF的二进制格式
OSX使用称为Mach-O的二进制格式
请参阅Linux X可执行文件与OS X"兼容"吗?进一步深入解释.