【发布时间】:2012-09-24 08:18:38
【问题描述】:
假设我有两个源文件,一个是用 D 编程语言编写的,另一个是用 C 编程语言编写的。我都只是编译它们,使用 DMD(数字火星 D 编译器)的 D 源和使用 GCC 编译器的 C 源。
结果将是来自不同来源的两个 .o(对象)文件。是否可以将这两个文件链接到一个可执行文件中?
【问题讨论】:
标签: gcc compiler-construction linker dmd object-files
假设我有两个源文件,一个是用 D 编程语言编写的,另一个是用 C 编程语言编写的。我都只是编译它们,使用 DMD(数字火星 D 编译器)的 D 源和使用 GCC 编译器的 C 源。
结果将是来自不同来源的两个 .o(对象)文件。是否可以将这两个文件链接到一个可执行文件中?
【问题讨论】:
标签: gcc compiler-construction linker dmd object-files
这取决于很多事情。处理参数有不同的方式:调用者设置它们,被调用者清理(Windows 中的 Pascal 风格,更紧凑);或者调用者设置和清理(C 风格,使用更多空间,因为清理对每个调用站点重复)。参数可以通过值或引用传递。数据(尤其是数组和结构)可以在内存中以不同的方式布局。从快速查看D's homepage 来看,它具有诸如不可变数据和本机关联数组之类的东西,必须在 C 中匹配(并且可能需要在 D 的运行时中进行链接,除非那个构建在您系统的 C 库上,否则您将在很多痛苦中)。等等。 如果你知道事情是如何完成的细节,你当然可以提供必要的胶水和缺少的编译器支持功能,但并不容易。对于 GCC 编译器,有一些保证和共性会有所帮助,对于不相关的编译器,这可能更像是一场赌博。有一个基于 LLVM 的 D compiler,我猜它有更多机会使用 gcc,因为 clang 的目标之一是 GCC 兼容性。
【讨论】: