【发布时间】:2016-03-23 21:39:49
【问题描述】:
我不确定我应该在哪里问这个问题,如果堆栈溢出不是最好的地方,请原谅。
我的问题是,在 Linux 上使用 gcc 生成的 .o 文件和在 Mac OS X 上生成的 .o 文件之间是否有任何区别。如果是这样,究竟有什么区别,为什么我不能在 Linux 上使用一个Mac 还是相反?
【问题讨论】:
-
取决于用于生成它们的编译器。如果两边都是gcc,那么它们应该是“相同的”
我不确定我应该在哪里问这个问题,如果堆栈溢出不是最好的地方,请原谅。
我的问题是,在 Linux 上使用 gcc 生成的 .o 文件和在 Mac OS X 上生成的 .o 文件之间是否有任何区别。如果是这样,究竟有什么区别,为什么我不能在 Linux 上使用一个Mac 还是相反?
【问题讨论】:
它们完全不同。 OS X 使用 Mach-O 目标文件格式。 Linux 使用 ELF 对象文件格式。它们执行相同的通用目的,但方式完全不同。
【讨论】:
以 .o 结尾的文件是目标文件。编译器为每个源文件创建一个目标文件,然后将它们链接到最终的可执行文件中。 Mac OS 基于 BSD 代码库,而 Linux 是独立开发的类 unix 系统。这意味着这些系统是相似的,但不是二进制兼容的。要使其正常工作,请在您将使用的操作系统上编译代码。
阅读有关二进制代码兼容性的更多信息: https://en.wikipedia.org/wiki/Binary_code_compatibility
【讨论】: