d - 我可以使用什么编译器将 C++ 与 D 链接?

标签 d

我想创建一个混合使用 C++ 和 D 的程序,并且我希望能够将其作为单个项目进行处理。

我的理解是我可以使用一些D编译器输出*.obj文件,然后我可以用一些C++编译器做同样的事情,然后将所有*.obj文件链接到一个二进制文件中,这是正确的吗?

如果这是正确的,我可以将任何 C++ 编译器与任何 D 编译器一起使用吗?还是我仅限于某些组合,例如 DMD-DMC、LDC-Clang 和 GDC-GCC?

我使用哪个链接器?

我使用哪个标准库?

最佳答案

理论上,您可以混合编译器,但在实践中,您有时会遇到目标文件格式和标准库混合问题,尤其是在 32 位 Windows 上。在那里很难,但在其他地方也不会太糟糕,因为大多数事情都是基于事实上的标准,如 MSVC 和 gcc。

Win32:将 dmc++(数字 mars 编译器和 C 运行时)与 dmd 或 g++ 和 gdc 一起使用。可以完成其他组合,但很麻烦。跨编译器系列在 Win32 中混合代码的最佳方法是使用 C 或 COM api 构建一个 DLL,并从 D 使用它。

Win64:由于 dmd 使用 64 位 Microsoft 格式和 C 库,因此将 dmd 与 Visual C++ 代码混合应该不会有什么问题。我不确定带有 dmd 的 Windows64 上的 g++。

大多数其他平台,包括 Linux:dmd 与 g++ 配合良好,gdc + gcc 也是如此。我不确定 ldc 和 g++ 是否兼容,但 ldc 也应该可以与任何平台上的其他基于 LLVM 的编译器一起正常工作。

关于d - 我可以使用什么编译器将 C++ 与 D 链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27448555/

相关文章:

d - 为什么 readf 没有按预期运行?

d - D 中的 C# 风格的 nameof 运算符?

d - 如何在没有 D 运行时编译 D 应用程序?

javascript - Vibe.d - 无法为其余 api 生成 JS 脚本

c++ - D 中的 FIFO/命名管道?

fork - 是否有 fork 并与 D 中的子进程通信的示例?

d - "with"关键字在 D 2.0 中有什么作用?

c# - 还有哪些其他语言支持 Go 的接口(interface)风格而无需显式声明?

pointers - 为 Phobos 的二进制堆比较指向结构的指针

class - D 类的公共(public)、私有(private)和 protected 访问限定符