DMD under 64-bit Windows 7 HOWTO

Rainer Schuetze r.sagitario at gmx.de
Tue Dec 18 23:54:11 PST 2012



On 18.12.2012 14:32, Gor Gyolchanyan wrote:
> Good day, fellow D developers.
> After spending much time figuring out how to make DMD
> work fluently under 64-bit Windows 7 I've realized that this is not a
> trivial task and lots of people might have trouble with this, so I've
> decided to post my solution, that might save people a lot of time.
> As we know, there are compatibility problems with 32-bit DMD binaries,
> because they are compiled using DMC back-end, which can only produce OMF
> binaries, so in order to avoid problems with linking against externally
> compiled libraries, it's much easier to stick to 64-bit binaries, so
> that DMD will use the Visual Studio linker to produce compatible COFF
> binaries. Another problem is that 32-bit DMD binaries are linked against
> obsolete 32-bit WinAPI libraries, which lack some very important
> functions, while the 64-bit binaries are required to link with the
> 64-bit libraries, supplied by the the Windows SDK.
>
> And here's how this could be arranged:
>
> 1. Prepare your development folder.
> 1.1. Create a folder with no spaces in its full path.
> 1.2. Store its full path in the '%DEV_DIR_ROOT%' environment variable.
> 2. Get the Windows SDK.
> 2.1. Download the Windows SDK.
> 2.1.1. Navigate to
> 'http://msdn.microsoft.com/en-US/windows//bb980924.aspx' in a web browser.
> 2.1.2. Under section 2 (number '2' in a green circle) click on the bold
> blue 'Install Now' link.
> 2.1.3. In the opened window click in the blue 'Download' button at the
> bottom of the page.
> 2.1.4. Make sure, that the Windows SDK installer ('winsdk_web.exe') is
> downloaded.
> 2.2. Install the downloaded Windows SDK.
> 2.2.1. Navigate to the folder, where the Windows SDK installer was
> downloaded in a file browser.
> 2.2.2. Double-click on the installer and agree to security warnings to
> launch it.
> 2.2.3. Click next, read and agree to the license until you reach the
> 'Install Locations' screen.
> 2..2.4. Store the path under 'Destination Folder for Tools' in the
> '%DEV_DIR_MSWINSDK%' (e.g. 'C:\Program Files (x86)\Microsoft
> SDKs\Windows\v7.0A') and click 'Next >'.
> 2.3.3. On the 'Installation Options' uncheck everything except 'x64
> Libraries' and 'Visual C++ Compilers' and click 'Next >'.
> 2.3.4. Confirm that everything is correct and click 'Next >' to start
> installing.
> 2.3.5. Make sure, tata the installation is completed succesfully.
> 2.3.6. Store the path to the installed Visual Studio C++ compiler into
> the '%DEV_DIR_MSVC%' environment variable (e.g. 'C:\Program Files
> (x86)\Microsoft Visual Studio 10.0\VC').
> 3. Get the DMD.
> 3.1. Navigate to 'http://ftp.digitalmars.com/dmd2beta.zip
> <http://ftp.digitalmars.com/dmd2beta..zip>' in a web browser.
> 3.2. Make sure, that the DMD compiler archive ('dmd2beta.zip') is
> downloaded.
> 3.3. Unzip the archive into '%DEV_DIR_ROOT%\Tools', so that the 'dmd2'
> folder in the archive will end up in '%DEV_DIR_ROOT%\Tools\dmd2'.
> 3.4. Adapt the compiler configuration to the development environment.
> 3.4.1. Open the file '%DEV_DIR_ROOT%\Tools\dmd2\windows\bin\sc.ini' in a
> text editor.
> 3.4.2. Replace the line with 'LIB=' with the line
> 'LIB="%DEV_DIR_WINSDK%\Lib\x64";"%DEV_DIR_MSVC%\lib\amd64";"%@P%\..\lib"'.
> 3.4.3. Add '-m64 -L/NOLOGO' to  the 'DFLAGS' variable.
> 3.4.4. Remove the lines with 'VCINSTALLDIR=' and 'WindowsSdkDir='.
> 3.4.5. Replace the like with 'LINKCMD64=' with the line
> 'LINKCMD64="%DEV_DIR_MSVC%\bin\amd64\link.exe"'
> Now "%DEV_DIR_ROOT%\Tools\dmd2\windows\bin\dmd.exe" will always use the
> Windows SDK libraries and Visual C++ compiler to produce 64-bit COFF
> binaries.
>
> I hope I was helpful, because when I started to set up a development
> environment under 64-bit Windows 7, I went through a lot of problems to
> get here and I'd love to have this HOWTO at that time.

Thanks for doing this. A few notes:

- I don't think it is the best idea to have two copies of the compiler 
to be able to compile for 32-bit and 64-bit targets. That's why I have 
suggested 2 different environment blocks in sc.ini, but the pull request 
has not been merged yet: 
https://github.com/D-Programming-Language/dmd/pull/1220

- With removing VCINSTALLDIR and WindowsSdkDir from sc.ini, you are 
disabling some magic in the linker invocation. I think this is good, the 
resulting settings should be in sc.ini. Please note that the environment 
variables can also be set in the shell environment already (e.g. when 
using the link to starting cmd.exe created by the SDK installer), 
setting them to blank might be a good idea.

- Most people will already have some other version of the linker and the 
SDK installed, e.g. as part of Visual Studio or VC++ Express. I think 
these should be supported aswell. I recently started creating a list of 
common installations but got distracted somehow.

- The Windows 8 SDK uses some other folder hierarchy.

- When building with debug information, the linker needs to load some 
DLLs to generate the PDB file. I had to modify the PATH environment 
variable in sc.ini as well to not get an error, i.e. 
'PATH=%DEV_DIR_MSVC%\bin\amd64;%PATH%'


>
> --
> Bye,
> Gor Gyolchanyan.


More information about the Digitalmars-d mailing list