【问题标题】:CentOS: cannot execute binary file compiled on Mac OS XCentOS:无法执行在 Mac OS X 上编译的二进制文件
【发布时间】:2017-02-07 16:15:30
【问题描述】:

我在 C 中创建了一个测试应用程序,如下所示:

#include<stdio.h>
int main(void){
    printf("Hello World!\n");
    return 0;
}

我在运行 OS X Yosemite 的 MacBook Air 上通过以下命令进行编译:

$ cc foo.c -o foo

然后我将“foo”二进制文件上传到我的 CentOS VPS,CHMOD 755,然后尝试通过以下命令执行:

$ ./foo

这将返回以下结果:

-bash: ./foo: cannot execute binary file

我还尝试使用 -m32 进行编译,以防出现 64/32 位冲突。产生了相同的结果。

为什么 CentOS 不会执行二进制文件?

【问题讨论】:

  • foo是否有执行权限?
  • @Raptor 是的,正如我所说,权限设置为 755。
  • 你是在什么机器上构建的?
  • @JohnZwinck 我的 MacBook Air,运行 OS X Yosemite。
  • 尝试执行file foo看看输出是什么

标签: c linux binary centos vps


【解决方案1】:

您在 Mac OS X 上构建了一个可执行文件,并尝试在 Linux 上运行它。这永远行不通,因为这两个操作系统不兼容。解决此问题的最简单方法是在 Linux 机器上构建程序,也许是在 Mac 上运行的虚拟机。一般来说,描述这种情况的短语是“交叉编译”。

【讨论】:

  • 正是问题所在。我的印象是,只要我用 g++ 编译它就可以兼容 Linux?
  • @nicktendo:不。GCC 存在于许多平台上,但它通常会为它所针对的平台构建可执行文件。这些异常称为“交叉编译”,并不典型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-19
相关资源
最近更新 更多