2011-08-09 126 views
3

我有一个非常简单的C程序,它只使用标准库函数进行一些加密计算。在OS X上编译C程序以在Ubuntu上运行

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

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

是否有任何简单的方法将OS X上的代码编译为可在Ubuntu上运行的二进制文件?如果不是,导致二进制不兼容的区别是什么?

+0

部分重复:http://stackoverflow.com/questions/5245444/cross-compiler-for-linux-on-mac-os-x这也链接到['crosstool-NG'](http:// crosstool -ng.org)。 – darvids0n

回答

1

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

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

+0

你可以!我之前完成了这个,成功了。GCC非常便携。它是不可移植的支持结构(库和内核接口)。建立你的交叉编译器并不是特别容易,并且在这个领域有很多地雷不知情。鉴于现在无处不在的虚拟机,使用虚拟机更简单,更安全。 –

3

您需要设置一个交叉编译器。使用GNU工具链,过程看起来是这样的:

  1. 下载binutilsgccglibc
  2. Untar bintuls(类似于binutils-x.y.z)。
  3. 的mkdir binutils的Linux的
  4. CD binutils的Linux的
  5. ../binutils-xyz/configure --target = i386的Ubuntu的Linux的(不知道确切的目标)
  6. 使
  7. 须藤make install
  8. cd ..
  9. untar gcc(类似于gcc-xyz)。
  10. 的mkdir GCC-linux的
  11. CD GCC-linux的
  12. ../gcc-xyz/configure --target = i386的Ubuntu的Linux的(不知道确切的目标)
  13. 使
  14. 须藤使安装
  15. CD ..
  16. 解压的glibc(为类似的glibc-XYZ)
  17. 的mkdir的glibc-linux的
  18. CD的glibc-LINX
  19. ../glibc-xyz/configure --target = I386-Ubuntu的Linux操作系统(不是确切的目标肯定)
  20. 使
  21. 须藤使安装
  22. CD ..

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

+0

感谢您的信息。我想我将在VirtualBox中安装Ubuntu的副本以用于编译。这似乎是最简单的路线。 –

+0

您需要将Linux内核标题贴近您所定位的发行版。除非获得这些内容,否则GLIBC无法连接到内核。 –

+0

请注意,编译gcc需要超过几分钟的时间......并且可能需要一些调查才能为binutils和glibc获取正确的配置选项。 – RBerteig