0

假设我有两个源文件,一个是用 D 编程语言编写的,另一个是用 C 编程语言编写的。我都只是编译它们,使用 DMD(数字火星 D 编译器)的 D 源和使用 GCC 编译器的 C 源。

结果将是来自不同来源的两个 .o(对象)文件。是否可以将这两个文件链接到一个可执行文件中?

4

1 回答 1

0

这取决于很多事情。处理参数有不同的方式:调用者设置它们,被调用者清理(Windows 中的 Pascal 风格,更紧凑);或者调用者设置和清理(C 风格,使用更多空间,因为清理对每个调用站点重复)。参数可以通过值或引用传递。数据(尤其是数组和结构)可以在内存中以不同的方式布局。快速查看D 的主页,它包含诸如不可变数据和本机关联数组之类的东西,必须在 C 中匹配(并且可能需要在 D 的运行时中进行链接,除非那个构建在您系统的 C 库上,否则您将在很多的痛苦)。等等。如果你知道事情是如何完成的细节,你当然可以提供必要的胶水和缺少的编译器支持功能,但它不会很容易。对于 GCC 编译器,有一些保证和共性会有所帮助,对于不相关的编译器,这可能更像是一场赌博。有一个基于 LLVM 的D 编译器,我猜它有更多使用 gcc 的机会,因为 clang 的目标之一是 GCC 兼容性。

于 2013-01-20T20:25:56.923 回答