digitalmars.D.learn - Windows 64
- "Casper =?UTF-8?B?RsOmcmdlbWFuZCI=?= <shorttail hotmail.com> (68/68) Oct 06 2013 Hey, I've been trying for a while to compile 64 bit programs on a
- Rainer Schuetze (10/73) Oct 07 2013 The linker does not find the import libraries from the Windows SDK, so
- "Casper =?UTF-8?B?RsOmcmdlbWFuZCI=?= <shorttail hotmail.com> (5/14) Oct 07 2013 Thank you. I added the lines and I'm still getting the same 103
- Rainer Schuetze (12/28) Oct 07 2013 Maybe the WindowsSdkDir environment variable is not set in your console....
- "Casper =?UTF-8?B?RsOmcmdlbWFuZCI=?= <shorttail hotmail.com> (9/22) Oct 07 2013 When I run %WindowsSdkDir% from the start menu I end up in the
- "Casper =?UTF-8?B?RsOmcmdlbWFuZCI=?= <shorttail hotmail.com> (4/4) Oct 07 2013 I have four folders in the SDK folder: v7.0A, v7.1, v8.0 and
- "Casper =?UTF-8?B?RsOmcmdlbWFuZCI=?= <shorttail hotmail.com> (6/6) Oct 07 2013 A lot of deleted posts and a lot of stupid later, v7.1 SDK is
- "Casper =?UTF-8?B?RsOmcmdlbWFuZCI=?= <shorttail hotmail.com> (11/11) Oct 07 2013 More searching suggests all the unresolved external symbols are
- "Casper =?UTF-8?B?RsOmcmdlbWFuZCI=?= <shorttail hotmail.com> (22/22) Oct 07 2013 Okay, it's definitely a problem with dmd passing something bad to
- "Casper =?UTF-8?B?RsOmcmdlbWFuZCI=?= <shorttail hotmail.com> (9/9) Oct 07 2013 And I'm done. The problem was this:
- Rainer Schuetze (7/15) Oct 07 2013 Sorry to hear you had so much trouble, but good that it finally works.
Hey, I've been trying for a while to compile 64 bit programs on a Windows 7 platform. The setup is the following: Version: 2.063.2 OS: Windows 7 64 Linked: VS 11 64 bit linker sc.ini: [Version] version=7.51 Build 020 [Environment] LIB="% P%\..\lib";\dm\lib DFLAGS="-I% P%\..\..\src\phobos" "-I% P%\..\..\src\druntime\import" LINKCMD=% P%\link.exe LINKCMD64=%VCINSTALLDIR%\bin\amd64\link.exe VCINSTALLDIR=%VCINSTALLDIR% WindowsSdkDir=%WindowsSdkDir% Environment variables are as follows: VCINSTALLDIR: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\ WindowsSdkDir: C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\ (I had initially forgot a \ at the end of the environment variables) On compiling the program "void main() {}" with -m64 -v in Eclipse with DDT (same result for command line), I get this thrown back: -------- Build Commands: -------- -od"bin" -of"bin\temp.exe" -I"src" "src\temp.d" -m64 -v binary C:\D\Tools\dmd2\windows\bin\dmd.exe version v2.063.2 config C:\D\Tools\dmd2\windows\bin\sc.ini parse temp importall temp import object (C:\D\Tools\dmd2\windows\bin\..\..\src\druntime\import\object.di) semantic temp entry main src\temp.d semantic2 temp semantic3 temp code temp function D main C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\amd64\link.exe /NOLOGO "bin\temp" /OUT:"bin\temp.exe" "/LIBPATH:C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\amd64" "/LIBPATH:C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\x64" C:\D\Tools\dmd2\windows\bin\..\lib\shell32.lib : warning LNK4003: invalid library format; library ignored C:\D\Tools\dmd2\windows\bin\..\lib\kernel32.lib : warning LNK4003: invalid library format; library ignored C:\D\Tools\dmd2\windows\bin\..\lib\shell32.lib : warning LNK4003: invalid library format; library ignored C:\D\Tools\dmd2\windows\bin\..\lib\kernel32.lib : warning LNK4003: invalid library format; library ignored phobos64.lib(dmain2_480_47b.obj) : error LNK2019: unresolved external symbol IsDebuggerPresent referenced in function _d_run_main LIBCMT.lib(a_map.obj) : error LNK2001: unresolved external symbol __imp_WideCharToMultiByte ... bin\temp.exe : fatal error LNK1120: 103 unresolved externals --- errorlevel 1120 I took the liberty of removing the mid section, since everything was LIBCMT.lib and phobos64.lib things that were unresolved. Any heads up on what I need to tinker with?
Oct 06 2013
On 07.10.2013 03:31, "Casper Færgemand" <shorttail hotmail.com>" wrote:Hey, I've been trying for a while to compile 64 bit programs on a Windows 7 platform. The setup is the following: Version: 2.063.2 OS: Windows 7 64 Linked: VS 11 64 bit linker sc.ini: [Version] version=7.51 Build 020 [Environment] LIB="% P%\..\lib";\dm\lib DFLAGS="-I% P%\..\..\src\phobos" "-I% P%\..\..\src\druntime\import" LINKCMD=% P%\link.exe LINKCMD64=%VCINSTALLDIR%\bin\amd64\link.exe VCINSTALLDIR=%VCINSTALLDIR% WindowsSdkDir=%WindowsSdkDir% Environment variables are as follows: VCINSTALLDIR: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\ WindowsSdkDir: C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\ (I had initially forgot a \ at the end of the environment variables) On compiling the program "void main() {}" with -m64 -v in Eclipse with DDT (same result for command line), I get this thrown back: -------- Build Commands: -------- -od"bin" -of"bin\temp.exe" -I"src" "src\temp.d" -m64 -v binary C:\D\Tools\dmd2\windows\bin\dmd.exe version v2.063.2 config C:\D\Tools\dmd2\windows\bin\sc.ini parse temp importall temp import object (C:\D\Tools\dmd2\windows\bin\..\..\src\druntime\import\object.di) semantic temp entry main src\temp.d semantic2 temp semantic3 temp code temp function D main C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\amd64\link.exe /NOLOGO "bin\temp" /OUT:"bin\temp.exe" "/LIBPATH:C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\amd64" "/LIBPATH:C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\x64" C:\D\Tools\dmd2\windows\bin\..\lib\shell32.lib : warning LNK4003: invalid library format; library ignored C:\D\Tools\dmd2\windows\bin\..\lib\kernel32.lib : warning LNK4003: invalid library format; library ignored C:\D\Tools\dmd2\windows\bin\..\lib\shell32.lib : warning LNK4003: invalid library format; library ignored C:\D\Tools\dmd2\windows\bin\..\lib\kernel32.lib : warning LNK4003: invalid library format; library ignored phobos64.lib(dmain2_480_47b.obj) : error LNK2019: unresolved external symbol IsDebuggerPresent referenced in function _d_run_main LIBCMT.lib(a_map.obj) : error LNK2001: unresolved external symbol __imp_WideCharToMultiByte ... bin\temp.exe : fatal error LNK1120: 103 unresolved externals --- errorlevel 1120 I took the liberty of removing the mid section, since everything was LIBCMT.lib and phobos64.lib things that were unresolved. Any heads up on what I need to tinker with?The linker does not find the import libraries from the Windows SDK, so it hits the 32-bit libraries that come with dmd. The released sc.ini does not work with VS2012+ or a Windows SDK 8, you should add the following lines to it: [Environment64] LIB=% P%\..\lib;%VCINSTALLDIR%\lib\amd64;%WindowsSdkDir%\Lib\win8\um\x64 ;; for some additional improvements PATH=%PATH%;%VCINSTALLDIR%\bin\x86_amd64;%VCINSTALLDIR%\..\Common7\IDE DFLAGS=%DFLAGS% -L/OPT:NOICF
Oct 07 2013
On Monday, 7 October 2013 at 07:03:39 UTC, Rainer Schuetze wrote:The linker does not find the import libraries from the Windows SDK, so it hits the 32-bit libraries that come with dmd. The released sc.ini does not work with VS2012+ or a Windows SDK 8, you should add the following lines to it: [Environment64] LIB=% P%\..\lib;%VCINSTALLDIR%\lib\amd64;%WindowsSdkDir%\Lib\win8\um\x64 ;; for some additional improvements PATH=%PATH%;%VCINSTALLDIR%\bin\x86_amd64;%VCINSTALLDIR%\..\Common7\IDE DFLAGS=%DFLAGS% -L/OPT:NOICFThank you. I added the lines and I'm still getting the same 103 unresolved externals. Commenting out stuff in the file makes dmd throws other errors, so I'm sure I'm editing the correct sc.ini. Where are the correct libraries supposed to be exactly?
Oct 07 2013
On 07.10.2013 12:21, "Casper Færgemand" <shorttail hotmail.com>" wrote:On Monday, 7 October 2013 at 07:03:39 UTC, Rainer Schuetze wrote:Maybe the WindowsSdkDir environment variable is not set in your console. For the Windows 8 SDK, the standard location of the x64 libraries is "c:\Program Files (x86)\Windows Kits\8.0\Lib\win8\um\x64" for the Windows 7 SDK or previous (replace the version): "c:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib\x64" so the entry with expanded environment variables on my system using VS 2012 and Windows SDK 8 is: LIB=% P%\..\lib;"c:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\amd64";"c:\Program Files (x86)\Windows Kits\8.0\Lib\win8\um\x64" I don't think the quotes are necessary, but the original sc.ini has them, too.The linker does not find the import libraries from the Windows SDK, so it hits the 32-bit libraries that come with dmd. The released sc.ini does not work with VS2012+ or a Windows SDK 8, you should add the following lines to it: [Environment64] LIB=% P%\..\lib;%VCINSTALLDIR%\lib\amd64;%WindowsSdkDir%\Lib\win8\um\x64 ;; for some additional improvements PATH=%PATH%;%VCINSTALLDIR%\bin\x86_amd64;%VCINSTALLDIR%\..\Common7\IDE DFLAGS=%DFLAGS% -L/OPT:NOICFThank you. I added the lines and I'm still getting the same 103 unresolved externals. Commenting out stuff in the file makes dmd throws other errors, so I'm sure I'm editing the correct sc.ini. Where are the correct libraries supposed to be exactly?
Oct 07 2013
On Monday, 7 October 2013 at 17:48:13 UTC, Rainer Schuetze wrote:Maybe the WindowsSdkDir environment variable is not set in your console. For the Windows 8 SDK, the standard location of the x64 libraries is "c:\Program Files (x86)\Windows Kits\8.0\Lib\win8\um\x64" for the Windows 7 SDK or previous (replace the version): "c:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib\x64" so the entry with expanded environment variables on my system using VS 2012 and Windows SDK 8 is: LIB=% P%\..\lib;"c:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\amd64";"c:\Program Files (x86)\Windows Kits\8.0\Lib\win8\um\x64" I don't think the quotes are necessary, but the original sc.ini has them, too.When I run %WindowsSdkDir% from the start menu I end up in the v7.0A folder, so the path seems correct. I have v7.0A, but there is no x64 folder in the Lib folder. In fact, I get the same 103 unresolved dependencies even if I change the name of the Lib folder to Lib2, so presumably I never get that far in the linking that it reaches the directory? What exactly does it need from WinSDK to link? Does it need anything if the program is simply void main() {}?
Oct 07 2013
I have four folders in the SDK folder: v7.0A, v7.1, v8.0 and v8.0A. The latter three contain nothing but a few files, presumably installed by VS 11 or something else. I'm currently trying to install v7.1.
Oct 07 2013
A lot of deleted posts and a lot of stupid later, v7.1 SDK is apparently installed in Program Files and not Program Files (x86). Kinda obvious given the names of said folders, but whatever. x.x The x64 version does indeed have an x64 folder in the Lib folder. However, all that aside, still the same 103 unresolved externals.
Oct 07 2013
More searching suggests all the unresolved external symbols are found in the lib files in v7.1\Lib\x64\ I'm guessing the linker doesn't know this. Any easy way to tell it where to look? Does the linker have an include folder? I tried with -LPATH"%WindowsSdkDir%\Lib\x64" as well as -L+"C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib\x64\ShLwApi" (one of the files mentioned in a search result), however they failed since D doesn't recognize spaces in paths. "cannot open file '+C:\Program.obj" Any clue on what I'm doing wrong? Any correct way to tell the linker where it can find stuff?
Oct 07 2013
Okay, it's definitely a problem with dmd passing something bad to link. I was able to link it manually and the program was working fine. import std.stdio; void main() { writeln("Hello Linker!"); } I ran "dmd -m64 test.d". The usual errors were dumped in the terminal. I then ran "link test.obj lala.txt", with lala.txt containing the following: C:\D\Tools\dmd2\windows\lib\phobos64.lib "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\amd64\LIBCMT.lib" "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\amd64\oldnames.lib" "C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib\x64\shell32.lib" "C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib\x64\kernel32.lib" After adding the five lines one by one, the linking succeeded and test.exe outputted "Hello Linker!". So, how do I not link it manually? It's sorta acceptable for small things, but I want DDT and Eclipse to do it automatically.
Oct 07 2013
And I'm done. The problem was this: LIB=% P%\..\lib;%VCINSTALLDIR%\lib\amd64;%WindowsSdkDir%\Lib\x64 The lib folder linked first contains kernel32.lib and shell32.lib. Removing both made -m64 possible, but killed -m32. Changing it to this: LIB=%VCINSTALLDIR%\lib\amd64;%WindowsSdkDir%\Lib\x64;% P%\..\lib solved everything. Now the dmd lib is checked last, when the real kernel32 and shell32 have already been found. Well that only took half a year. ~~ Thanks for the help.
Oct 07 2013
On 08.10.2013 01:26, "Casper Færgemand" <shorttail hotmail.com>" wrote:And I'm done. The problem was this: LIB=% P%\..\lib;%VCINSTALLDIR%\lib\amd64;%WindowsSdkDir%\Lib\x64 The lib folder linked first contains kernel32.lib and shell32.lib. Removing both made -m64 possible, but killed -m32. Changing it to this: LIB=%VCINSTALLDIR%\lib\amd64;%WindowsSdkDir%\Lib\x64;% P%\..\lib solved everything. Now the dmd lib is checked last, when the real kernel32 and shell32 have already been found. Well that only took half a year. ~~ Thanks for the help.Sorry to hear you had so much trouble, but good that it finally works. I've been trying to convince Walter to put the 64-bit libraries into a different folder "lib64" for the dmd release for some time. I hope this lesson will convince him. BTW: if you want to pass additional directories to the ms linker through the dmd command line, you can use "-L/LIBPATH:dir".
Oct 07 2013