在 OS X 上编译 C 程序以在 Linux 上运行

标签 c linux macos ubuntu cross-platform

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

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

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

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

最佳答案

您需要设置一个交叉编译器。使用 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 进行安装
  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 进行安装
  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 进行安装
  22. CD ..

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

关于在 OS X 上编译 C 程序以在 Linux 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6990333/

相关文章:

c - fminunc如何优化梯度下降中的学习率(步长比例)值?

linux - 使用 as 和 ld 在 x86-64 Linux 上汇编和运行 i386 asm 程序

android - 是否可以在 Android 手机中执行 shell 脚本?

linux - 使用shell脚本获取MAC地址

cocoa - 如何在 Cocoa 应用程序中强制执行最低操作系统要求?

ios - CGFloat 在哪个 Apple 硬件/操作系统上是 32 位的,哪个是 64 位的?

c - 使用 C 和 Windows 列出目录内容

c - 如何打印特定单词之前的所有内容以及特定单词之后的所有内容?

c - 为什么程序有时会出现 "skip over"printfs?

macos - 安装 valgrind 时出错