是否可以在一个平台上编译程序并与其他平台链接?对象文件包含什么?我们可以将可执行文件脱钩以生成目标文件吗?
不可以.一般来说,目标文件格式可能相同,例如ELF,但目标文件的内容因系统而异.
目标文件包含以下内容:
Object code that implements the desired functionality A symbol table that can be used to resolve references Relocation information to allow the linker to locate the object code in memory Debugging information
目标代码通常不仅是处理器特定的,而且例如,如果它包含系统调用,则还特定于OS.
Is it possible to compile program on one platform and link with other ?
绝对.如果使用交叉编译器.此编译器专门针对平台并生成与目标平台兼容的目标文件(和程序).因此,您可以使用X86 Linux系统,例如,使用适当的交叉编译器为基于powerpc或ARM的系统制作程序.我这样做是在这里.
是否可以在一个平台上编译程序并与其他平台链接?
一般来说,没有.目标文件特定于编译器.一些编译器吐出COFF,其他编译器吐出ELF等.最重要的是,你必须担心调用约定,系统调用等.这是依赖于平台的.
对象文件包含什么?
符号表,代码,重定位,链接和调试信息.
如果您所追求的是可移植性,那么编写可移植的C/C++并让特定于平台的兼容编译器完成工作.
在实践中,没有.有几件事必须是相同的: - OS接口(相同的系统调用) - 数据的内存布局(字节序,结构填充等) - 调用约定 - 目标文件格式(例如ELF在Linux上非常标准)
查找ABI以获取更多信息.