我可以用 LLVM 编译多种语言的代码吗?

Vic*_*sky 3 multilingual compilation llvm

我可以用两种不同的语言编写程序并将它们编译在一个 LLVM 可执行文件中吗?

例如,我的程序一部分是用 C++ 编写的,一部分是用 D 编写的。

Eli*_*sky 5

不是在一般情况下。仅当语言与 ABI 兼容时。对于 C 和 C++ 来说,这在非常有限的程度上是正确的(extern "C"来自 C++ 方面的代码),而对于其他语言则更是如此。

  • @mishr:不,没那么简单。LLVM IR 不能表示任何非平凡的数据结构——这是 ABI,前端处理这个。因此,如果您将某个对象从一种语言传递到另一种语言,则 LLVM IR 无法神奇地知道如何用一种语言分解该对象并用另一种语言重建它。 (2认同)