【问题标题】:Compiling C Program on OS X to Run on Linux在 OS X 上编译 C 程序以在 Linux 上运行
【发布时间】:2011-08-09 01:02:25
【问题描述】:

我有一个非常简单的 C 程序,它只使用标准库函数进行一些加密计算。

我将在 Ubuntu(10.04,32 位)上运行该程序,并使用带有 -m32 标志的 cc 在 OS X 10.6 上编译它。当我尝试在 Ubuntu 上运行它时,我收到错误消息“无法执行二进制文件。”

当我在 Ubuntu 上编译它时,它运行良好。

有没有什么简单的方法可以将 OS X 上的代码编译成可以在 Ubuntu 上运行的二进制文件?如果不是,导致二进制不兼容的差异是什么?

【问题讨论】:

标签: c linux macos ubuntu cross-platform


【解决方案1】:

您需要设置一个交叉编译器。使用 GNU 工具链,该过程如下所示:

  1. 下载binutils、gcc和glibc。
  2. 解压 bintuls(到 binutils-x.y.z 之类的东西)。
  3. mkdir binutils-linux
  4. cd binutils-linux
  5. ../binutils-x.y.z/configure --target=i386-ubuntu-linux(不确定具体目标)
  6. 制作
  7. sudo make install
  8. cd ..
  9. 解压 gcc(到 gcc-x.y.z 之类的东西)。
  10. mkdir gcc-linux
  11. cd gcc-linux
  12. ../gcc-x.y.z/configure --target=i386-ubuntu-linux(不确定具体目标)
  13. 制作
  14. sudo make install
  15. cd ..
  16. 解压 glibc(到 glibc-x.y.z 之类的东西)
  17. mkdir glibc-linux
  18. cd glibc-linx
  19. ../glibc-x.y.z/configure --target=i386-ubuntu-linux(不确定具体目标)
  20. 制作
  21. sudo make install
  22. cd ..

我从未尝试过将 OSX 作为主机操作系统,所以我不知道是否还有其他并发症,但这是一般方法。我正在记忆中工作,所以如果您需要更多帮助,请添加评论。

【讨论】:

  • 感谢您的信息。我想我要在 VirtualBox 中安装一个 Ubuntu 副本以用于编译。这似乎是最简单的路线。
  • 您还需要靠近您目标发行版的 Linux 内核头文件。除非有这些,否则 GLIBC 无法与内核接口。
  • 请注意,编译 gcc 需要几分钟以上的时间......而且可能需要一些调查才能获得 binutils 和 glibc 的正确配置选项。
  • 虚拟盒子看起来确实是更容易的出路。但是想想你可以通过艰苦的方式获得的所有极客信誉!
  • @RBerteig - 哈哈,这是真的。十五年前,我可能会追求极客的信条。这些天我只想把事情做好。 :)
【解决方案2】:

恐怕你不能给出 gcc 的最低可移植性。

当然你可以构建一个交叉编译器like this,但我建议你使用ubuntu虚拟机进行编译。

【讨论】:

  • 你可以!我以前也做过这个,很成功。 GCC 是高度可移植的。它是不可移植的支持结构(库和内核接口)。构建你的交叉编译器并不是特别容易,而且对于粗心的人来说,这个领域有很多地雷。鉴于如今虚拟机无处不在,只使用一台会更容易、更安全。
猜你喜欢
  • 2011-11-22
  • 1970-01-01
  • 1970-01-01
  • 2011-03-04
  • 2016-05-04
  • 1970-01-01
  • 2011-05-19
  • 1970-01-01
  • 2011-07-08
相关资源
最近更新 更多