我可以使用什么编译器链接C++;和D? 我想创建一个C++和D混合的程序,我希望能够把它作为一个单独的项目来处理。 我的理解是,我可以使用一些D编译器输出*.Obf文件,然后我可以用C++编译器做同样的操作,然后把所有*.Obf文件链接成一个二进制,这是正确的吗? 如果这是正确的,我可以使用任何C++编译器和任何D编译器吗?或者我只限于某些组合,如DMD-DMC、LDC-Clang和GDC-GCC

我可以使用什么编译器链接C++;和D? 我想创建一个C++和D混合的程序,我希望能够把它作为一个单独的项目来处理。 我的理解是,我可以使用一些D编译器输出*.Obf文件,然后我可以用C++编译器做同样的操作,然后把所有*.Obf文件链接成一个二进制,这是正确的吗? 如果这是正确的,我可以使用任何C++编译器和任何D编译器吗?或者我只限于某些组合,如DMD-DMC、LDC-Clang和GDC-GCC,d,D,我应该使用哪个链接器 我应该使用哪种标准库?理论上,可以混合使用编译器,但实际上,有时会出现对象文件格式和标准库混合问题,特别是在32位Windows上。在那里很难,但在其他地方也不太糟糕,因为大多数事情都是基于事实上的标准,比如MSVC和gcc Win32:将dmc++(数字mars编译器和C运行时)与dmd或g++和gdc一起使用。其他组合也可以做,但很混乱。在Win32中跨编译器系列混合代码的最佳方法是使用C或COM api构建DLL,并使用D Wi64:由于DMD使用64位微软格式和C

我应该使用哪个链接器


我应该使用哪种标准库?

理论上,可以混合使用编译器,但实际上,有时会出现对象文件格式和标准库混合问题,特别是在32位Windows上。在那里很难,但在其他地方也不太糟糕,因为大多数事情都是基于事实上的标准,比如MSVC和gcc

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

Wi64:由于DMD使用64位微软格式和C库,所以DMD与Visual C++代码混合时几乎不存在问题。我不确定Windows64上是否有带dmd的g++


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

另请参见:到目前为止,使用clang和ldc2,一个简单的add(int,int)函数似乎可以很好地工作。谢谢根据main的位置,更复杂的函数可能会导致D运行时问题。如果main是在D中定义的,那么它应该可以正常工作。如果它是用C++定义的,那么在调用大多数D函数之前,需要初始化D运行时。我以前也写过很多关于这方面的文章,所以如果你想知道更多关于运行时的搜索,initalize应该会出现一些东西(或者在这里问一下,我会回来)太棒了,谢谢。我得调查一下。我希望最终的目标是Android,在Android中,用户定义的本机入口点是不可能的。听起来好像Runtime.initialize()必须在静态初始化阶段之后,但在执行任何D代码之前调用。如果我错了,请纠正我。现在有人正在将运行时移植到android。运行时基本上可以在任何时候初始化,您也可以在常规D函数中进行初始化,您只需要在调用某些D函数(如GC内存分配)之前进行初始化。D的C子集在根本没有运行时的情况下工作。哦,是的,你不能使用D静态构造函数,因为它们是由运行时运行的。初始化!