链接多个单个跨平台对象文件?

时间:2011-09-27 01:23:04

标签: c++ c linker cross-platform

如果我将一个跨平台的代码片段编译成目标文件,是否可以使用链接器从该单个二进制文件创建单独的平台相关可执行文件(.exe,.bin)?

编辑:似乎回答者并不真正理解我的问题。我问你是否可以使用跨平台对象并从中生成与平台相关的可执行文件。

2 个答案:

答案 0 :(得分:1)

这完全取决于您拥有的链接器和其他开发工具。当然,在gcc等高级环境中可以交叉编译,您可以在其中为不同的体系结构生成目标代码。

但是将所有不同架构对象打包到一个可执行文件中并不是我在gcc中所见过的。

我在Apple平台上看到了胖二进制文件(可执行程序可以在旧的68K Mac或较新的PowerPC上运行)但我从未真正成为他们的忠实粉丝而且Apple完全控制了它们那里的环境。

此外,加载程序代码(通常是操作系统的一部分)必须能够检测它应该从这样一个胖二进制文件中提取和运行的架构(这是Apple的控件派上用场的地方 - 它们可以修改它们的各种操作用于检测和加载正确版本的系统。)

就我个人而言,我认为您最好使用可移植语言(Java,Perl,Python等)或将应用程序打包到不同的二进制文件中 - 您总是可以使用一个优秀的跨平台安装工具包来安装正确的版本。


根据您的编辑澄清问题:是的。如果对象文件是真正的跨平台文件,它们将适用于所有这些平台。因此,根据定义,您可以基于此构建特定于平台的可执行文件。请注意,这与编译某些跨平台源代码不同,因为编译过程本身很可能将其锁定到特定平台。

而且,它又取决于所使用的工具链(编译器,链接器,加载器等)。

答案 1 :(得分:1)

也应该在Linux上支持胖二进制文件,但是从未尝试过。

The FatELF page says they support static and dynamic libraries, their faq seems extensive.