On 4/04/2015 1:00 a.m., ddos wrote:
progress ... i think
in some forum posts i've read 64bit dmd uses a differnt linker which
supports coff
atleast i can now link my app in 64bit mode without errors
dmd -m64 source/app.d OpenVG.lib

also an exported test function prints to stdout, so my problem is solved
for x64 :)

if anyone could explain how this could be done with 32bit builds i'd
appreciate it
why does dmd use different linkers for 32 and 64bit anyway?

In the beginning, Symantec had their own c/c++ compiler. That compiler was made by a humble but brilliant developer called Walter Bright. At the time the Microsoft toolchain was horribly incompatible between versions. In fact it was so bad, that a linker was made specifically for it. At the time OMF was the standard binary format for Windows. Not long after PE-COFF was transitioned to for Windows 95. Not long after this, Symantec dropped their toolchain and that clever developer negotiated the rights to it and in the process created a little company.

Furthering this, that clever developer didn't enjoy c++ not nearly as much as what others think of it. Instead choose to create a new language using the existing toolchain.

Fast forward about 12 years. The compiler still used that old linker but only for 32bit on Windows. But now the need was strong for 64bit support. After successful addition of 64bit support of *nix, Windows was worked on. Now nobody wanted to add 64bit support to that old old linker as it was written in an arcane dialect of assembly. Almost nobody understood it.

So the clever people, implemented it using the standard toolchain on the Windows platform. Instead of their own custom one. However it used PE-COFF for binary format. Unfortunately the need was not great to add it also for 32bit. Causing a great divide. That divide has since been resolved and will be forgotten about after one more major release.

Disclaimer: not 100% accurate, bunch of stuff I missed out. But more or less accurate timeline.

Reply via email to