Linux -> Windows crosscompiler

Joakim via digitalmars-d-ldc digitalmars-d-ldc at puremagic.com
Mon May 15 10:37:30 PDT 2017


On Monday, 15 May 2017 at 09:27:36 UTC, Marvin Gülker wrote:
> Hi everyone,
>
> I am mainly a Linux developer and find working on Windows 
> rather complicated. My most recent try confirmed that; I wanted 
> to write a D application using GraphicsMagick's C interface -- 
> now I have a mixture of compilers on my Windows machine (MinGW 
> GCC, Msys2 GCC, MSVC, LDC, DMD) and I still get linking errors.

Are you mixing object files produced by different D compilers?  
That won't work, you need to compile all your D code with a 
single D compiler.

> That only for the context. Since I previously had good 
> experience in
> using a Linux -> Windows crosscompiler for regular C/C++ 
> (MXE[1]) I thought
> it could be possible to have something similar for D. Until now 
> I have
> been using dmd, but Internet research told me dmd cannot be 
> built as a
> crosscompiler. GDC appears to be a one-man show and is still 
> pending
> upstream GCC approval, so I decided to go with LDC.

It can be done with dmd, but it would require some work on the 
compiler itself.

> Thus, is it possible to build an LDC crosscompiler that is 
> hosted on x86_64 Linux and targets i686/x86_64 Windows? If so, 
> how? I didn't find any information on the topic, people 
> appeareantly only ever want to target ARM (cell phones?), which 
> is not what I am interested in.

Of course, by default ldc is a cross-compiler for all other 
platforms it officially supports.  You simply need to pass the 
right llvm triple to ldc, similar to how it's done for the ARM 
cross-compiler.

The bigger issue is getting the cross-compiled stdlib and a 
cross-linker, that will link for Windows but run on linux.  You 
can probably just take the pre-built stdlib from the ldc for 
Windows package, but you're on your own for finding a 
cross-linker.  Maybe lld would work?

http://lld.llvm.org


More information about the digitalmars-d-ldc mailing list