Created attachment 1239
A simple "hello world" code
As usual, I updated dmd, druntime, and phobos to the latest git version.
Then I tried to build a hello world code (as attached).
I got these errors:
C:\Users\CSL-NB-064\Codes\D>dmd hello.d
OPTLINK (R) for Win32 Release 8.00.5
Copyright (C) Digital Mars 1989-2009 All rights reserved.
http://www.digitalmars.com/ctg/optlink.html
hello.obj(hello)
Error 42: Symbol Undefined
_D3std4conv21ConvOverflowException6__ctorMFNaNbNfAyaAyakZC3std4conv21ConvOverflowException
hello.obj(hello)
Error 42: Symbol Undefined
_D3std4conv13ConvException6__ctorMFNaNbNfAyaAyakZC3std4conv13ConvException
hello.obj(hello)
Error 42: Symbol Undefined
_D3std6format15FormatException6__ctorMFNaNbNfAyaAyakC6object9ThrowableZC3std6format15FormatE
xception
hello.obj(hello)
Error 42: Symbol Undefined
_D3std3utf12UTFException6__ctorMFNaNfAyakAyakC6object9ThrowableZC3std3utf12UTFException
--- errorlevel 4
I didn't use any switch, just: dmd hello.d
Comment #1 by k.hara.pg — 2013-08-06T21:20:52Z
(In reply to comment #0)
> I got these errors:
>
> C:\Users\CSL-NB-064\Codes\D>dmd hello.d
> OPTLINK (R) for Win32 Release 8.00.5
> Copyright (C) Digital Mars 1989-2009 All rights reserved.
> http://www.digitalmars.com/ctg/optlink.html
> hello.obj(hello)
> Error 42: Symbol Undefined
> _D3std4conv21ConvOverflowException6__ctorMFNaNbNfAyaAyakZC3std4conv21ConvOverflowException
> hello.obj(hello)
> Error 42: Symbol Undefined
> _D3std4conv13ConvException6__ctorMFNaNbNfAyaAyakZC3std4conv13ConvException
> hello.obj(hello)
> Error 42: Symbol Undefined
> _D3std6format15FormatException6__ctorMFNaNbNfAyaAyakC6object9ThrowableZC3std6format15FormatE
> xception
> hello.obj(hello)
> Error 42: Symbol Undefined
> _D3std3utf12UTFException6__ctorMFNaNfAyakAyakC6object9ThrowableZC3std3utf12UTFException
> --- errorlevel 4
You would need rebuild Phobos library, because some Exception class ctors are now annotated with pure and @safe attributes in git head.
Comment #2 by andre — 2013-08-10T02:57:21Z
> You would need rebuild Phobos library, because some Exception class ctors are
> now annotated with pure and @safe attributes in git head.
OK, I just fetch the latest dmd, druntime & phobos source code. After rebuilding all of them, I tried to compile the same code:
C:\Users\CSL-NB-064\Codes\D>dmd hello.d
OPTLINK (R) for Win32 Release 8.00.5
Copyright (C) Digital Mars 1989-2009 All rights reserved.
http://www.digitalmars.com/ctg/optlink.html
hello.obj(hello)
Error 42: Symbol Undefined _D3std4conv21ConvOverflowException6__ctorMFNaNbNfAyaAyakZC3std4conv21ConvOverflowException
hello.obj(hello)
Error 42: Symbol Undefined _D3std4conv13ConvException6__ctorMFNaNbNfAyaAyakZC3std4conv13ConvException
hello.obj(hello)
Error 42: Symbol Undefined _D3std6format15FormatException6__ctorMFNaNbNfAyaAyakC6object9ThrowableZC3std6format15FormatE
xception
hello.obj(hello)
Error 42: Symbol Undefined _D3std3utf12UTFException6__ctorMFNaNfAyakAyakC6object9ThrowableZC3std3utf12UTFException
hello.obj(hello)
Error 42: Symbol Undefined _D3std3uni42__T11Uint24ArrayTS3std3uni13ReallocPolicyZ11Uint24Array5emptyMxFNaNbNdNeZb
hello.obj(hello)
Error 42: Symbol Undefined _D3std3uni42__T11Uint24ArrayTS3std3uni13ReallocPolicyZ11Uint24Array6__dtorMFNbNeZv
hello.obj(hello)
Error 42: Symbol Undefined _D3std3uni36__T11Uint24ArrayTS3std3uni8GcPolicyZ11Uint24Array5emptyMxFNaNbNdNeZb
hello.obj(hello)
Error 42: Symbol Undefined _D3std3uni36__T11Uint24ArrayTS3std3uni8GcPolicyZ11Uint24Array6__dtorMFNaNbNeZv
--- errorlevel 8
Comment #3 by k.hara.pg — 2013-08-10T05:34:59Z
(In reply to comment #2)
> OK, I just fetch the latest dmd, druntime & phobos source code. After
> rebuilding all of them, I tried to compile the same code:
[snip]
Maybe you are still link old phobos.lib (2.063 or earlier). After git head rebuild, you would forgot to place the generated phobos.lib (in dmd2\src\phobos\) on correct lib path (dmd2\windows\lib\phobos.lib by default).
Comment #4 by andre — 2013-08-12T18:48:07Z
> Maybe you are still link old phobos.lib (2.063 or earlier). After git head
> rebuild, you would forgot to place the generated phobos.lib (in
> dmd2\src\phobos\) on correct lib path (dmd2\windows\lib\phobos.lib by default).
I don't think so. Every time I finished rebuilding druntime and phobos, I always copy the new druntime.lib and phobos.lib into my dmd directory, replacing the old ones.
Anyway, I just repeated the compilation process, just to make sure. Here's the screencast of it:
http://youtu.be/Fu1P0HGkZXA
Comment #5 by k.hara.pg — 2013-08-12T23:45:54Z
(In reply to comment #4)
> > Maybe you are still link old phobos.lib (2.063 or earlier). After git head
> > rebuild, you would forgot to place the generated phobos.lib (in
> > dmd2\src\phobos\) on correct lib path (dmd2\windows\lib\phobos.lib by default).
>
> I don't think so. Every time I finished rebuilding druntime and phobos, I
> always copy the new druntime.lib and phobos.lib into my dmd directory,
> replacing the old ones.
>
> Anyway, I just repeated the compilation process, just to make sure. Here's the
> screencast of it:
> http://youtu.be/Fu1P0HGkZXA
Hmm... As far as I see the video, the operation would have no critical problem.
But I have still some questions.
1. Do you really use the recompiled and copied dmd.exe in C:\dmd\bin ?
You set the PATH=%PATH%;C:\dm\bin;C:\dmd\bin first, but I'm not sure that the previous PATH does not contain wrong directory path.
2. Do you use intended sc.ini file?
Read http://dlang.org/dmd-windows.html#sc_ini and check related paths.
Honestly I cannot reproduce the issue in my local environment (I'm using Windows 7). It seems to me that the issue is in your development environment. Sorry for my poor reply...
Comment #6 by k.hara.pg — 2013-08-12T23:51:42Z
I just noticed that, the undefined symbol in comment#0 and comment#2 are different (four std.uni symbols added).
And, few days ago std.uni module is drastically improved by https://github.com/D-Programming-Language/phobos/pull/1347 .
Looks to me that your environment does not seem to follow it.
Comment #7 by andre — 2013-08-13T00:10:12Z
> 1. Do you really use the recompiled and copied dmd.exe in C:\dmd\bin ?
> You set the PATH=%PATH%;C:\dm\bin;C:\dmd\bin first, but I'm not sure that
> the previous PATH does not contain wrong directory path.
This is the default content of my PATH:
C:\Program Files\Haskell\bin;C:\Haskell Platform\2013.2.0.0\lib\extralibs\bin;C:\Haskell Platform\2013.2.0.0\bin;C:\Program Files\Broadcom\Broadcom 802.11\Driver;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;c:\Program Files\WIDCOMM\Bluetooth Software\;C:\Program Files\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\;C:\Program Files\Windows Kits\8.0\Windows Performance Toolkit\;C:\Program Files\GNU\GnuPG;C:\sbt\;C:\Program Files\Microsoft SDKs\TypeScript\0.8.1.1\;C:\Program Files\nodejs;c:\Program Files\ATI Technologies\ATI.ACE\Core-Static;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files\Microsoft\Web Platform Installer\;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Python27;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\GNU\GnuPG\pub;C:\Program Files\Flash Magic;C:\Program Files\TortoiseHg\;C:\Program Files\TortoiseSVN\bin;C:\Program Files\Java\jdk1.7.0_25\bin;C:\Haskell Platform\2013.2.0.0\mingw\bin;C:\Users\CSL-NB-064\AppData\Roaming\cabal\bin;C:\Vim\vim74;C:\scala\bin;C:\mingw\bin;C:\FASM;C:\Users\CSL-NB-064\AppData\Local\Pandoc\;C:\texlive\2013\bin\win32;"C:\Program Files\Git\bin"
As you can see, the path to Digital Mars C and D compiler are not included.
> 2. Do you use intended sc.ini file?
> Read http://dlang.org/dmd-windows.html#sc_ini and check related paths.
Here's my sc.ini :
[Environment]
LIB="C:\dmd\lib"
DFLAGS="-IC:\dmd\import" "-IC:\dmd\phobos"
LINKCMD=link.exe
Comment #8 by k.hara.pg — 2013-08-13T00:41:48Z
Looks not bad to me. Strange...
Comment #9 by nilsbossung — 2013-08-13T06:23:37Z
(In reply to comment #4)
> > Maybe you are still link old phobos.lib (2.063 or earlier). After git head
> > rebuild, you would forgot to place the generated phobos.lib (in
> > dmd2\src\phobos\) on correct lib path (dmd2\windows\lib\phobos.lib by default).
>
> I don't think so. Every time I finished rebuilding druntime and phobos, I
> always copy the new druntime.lib and phobos.lib into my dmd directory,
> replacing the old ones.
>
> Anyway, I just repeated the compilation process, just to make sure. Here's the
> screencast of it:
> http://youtu.be/Fu1P0HGkZXA
In the video, you don't copy phobos.lib over: http://www.youtube.com/watch?v=Fu1P0HGkZXA&t=1m56s
Comment #10 by nilsbossung — 2013-08-13T06:27:46Z
(In reply to comment #9)
> In the video, you don't copy phobos.lib over:
> http://www.youtube.com/watch?v=Fu1P0HGkZXA&t=1m56s
Forget about that, I got confused. You're doing make, make clean, make, copy. So, in the end you should be fine.
Comment #11 by andre — 2013-08-14T00:00:07Z
> It seems to me that the issue is in your development environment.
> Sorry for my poor reply...
If this is the case then I guess the issue can be quite difficult to trace.
Hmmm.. maybe you can give me some points to check regarding of my environment, so we can find out what the differences are between mine and yours, and hopefully one of them is the culprit?
Comment #12 by maxim — 2013-08-14T03:15:32Z
One way to test the issue is to compile dmd, druntime, phobos and hello object file in problematic environment and attach them here to test in working environments. If hello program is linkable and runnable in others environments, then problem is with your setup.
Comment #13 by andre — 2013-08-19T02:27:29Z
(In reply to comment #12)
> One way to test the issue is to compile dmd, druntime, phobos and hello object
> file in problematic environment and attach them here to test in working
> environments. If hello program is linkable and runnable in others environments,
> then problem is with your setup.
I decided to wipe out dmd, druntime, and phobos directories and rebuild them.
While building phobos, I got this:
Error: cannot find source code for runtime library file 'object.d'
dmd might not be correctly installed. Run 'dmd -man' for installation instructions.
Specify path to file 'object.d' with -I switch
I could find both object.di and object_.d in druntime directory, but not object.d
Comment #14 by maxim — 2013-08-19T02:40:21Z
(In reply to comment #13)
> (In reply to comment #12)
> > One way to test the issue is to compile dmd, druntime, phobos and hello object
> > file in problematic environment and attach them here to test in working
> > environments. If hello program is linkable and runnable in others environments,
> > then problem is with your setup.
>
> I decided to wipe out dmd, druntime, and phobos directories and rebuild them.
> While building phobos, I got this:
> Error: cannot find source code for runtime library file 'object.d'
> dmd might not be correctly installed. Run 'dmd -man' for installation
> instructions.
It seems that you indeed linked to old druntime.
> Specify path to file 'object.d' with -I switch
>
> I could find both object.di and object_.d in druntime directory, but not
> object.d
It should be object_.d. You haven't setup path to druntime correctly.
Comment #15 by andre — 2013-08-19T07:41:43Z
> It should be object_.d. You haven't setup path to druntime correctly.
I just realised that sc.ini is missing from dmd's bin directory. So I copied that file, and rebuild druntime and phobos once again. Of course I copied the new druntime and phobos directories, as well as druntime.lib and phobos.lib into dmd directory. Still failed to build even the simple hello world.
Anyway, this is my latest dmd build. Please give it a try. Maybe one of you could find if I did something wrong with it.
http://www.mediafire.com/?z8gbeplhwumcogd
Comment #16 by bus_dbugzilla — 2013-09-09T15:43:25Z
I seem to be having the same problem. Master works fine for me on OSX 10.7, FreeBSD 9.1 (32-bit OS), and Debian 6 (both 32-bit OS and 64-bit OS). But on Win7 (64-bit OS) I get the same problem as Andre:
http://forum.dlang.org/thread/20130829210040.00002184@unknownhttp://forum.dlang.org/thread/20130903205311.00003c40@unknown
To see if you can reproduce it, you can compile this script:
https://github.com/Abscissa/installer/blob/create-zip/create_dmd_release/create_dmd_release.d
...then remove all other DMDs from the path, and then run the script. For the purposes of this bug report, you can simply run the script like this:
mkdir junk
create_dmd_release master --extras=junk --only-32 -v
On other 32-bit-capable OSes that results in a working DMD toolchain. But (at least for me, I don't know about other people) on Windows, it fails the first time the newly-built phobos is used - when trying to build chmgen. You can then try to use the newly-built DMD toolchain (in [your temp dir]/.create_dmd_release/dmd/src), and it will fail to link even a basic hello world. But on other OSes it works fine, and using "v2.063.2" instead of "master" also results in a working DMD/phobos.
Just an idea: It is possible that maybe this issue *only* occurs on fresh checkouts/builds of DMD/druntime/phobos? Perhaps there's something incorrect or non-standard on the Windows systems where it *is* working, and that's the reason it's not failing for some people? Maybe it would start failing on those systems when using a completely fresh and isolated checkout/build? Just a crazy idea.
Comment #18 by bus_dbugzilla — 2013-09-13T04:28:19Z
(In reply to comment #17)
>
> The script could not be compiled:
Compile it with a working DMD, like v2.063.2. Then run it with
mkdir junk
create_dmd_release master --extras=junk --only-32 -v
It'll clone dmd/phobos/tools/etc master to a temp dir then try to compile them. I imagine you'll get the same result I did since you're having trouble getting a working dmd/phobos from master, too.
Comment #19 by andre — 2013-09-13T08:41:48Z
(In reply to comment #18)
> mkdir junk
> create_dmd_release master --extras=junk --only-32 -v
>
> It'll clone dmd/phobos/tools/etc master to a temp dir then try to compile them.
> I imagine you'll get the same result I did since you're having trouble getting
> a working dmd/phobos from master, too.
Failed in building chmgen
Running: make MODEL=32 chm DMD=../dmd/src/dmd DOCSRC=../dlang.org DOCDIR=../web/phobos-prerelease -f win32.mak
../dmd/src/dmd chmgen
OPTLINK (R) for Win32 Release 8.00.13
Copyright (C) Digital Mars 1989-2010 All rights reserved.
http://www.digitalmars.com/ctg/optlink.html
chmgen.obj(chmgen)
Error 42: Symbol Undefined _D3std4conv11__T2toTAyaZ11__T2toTAyaZ2toFNaNbNfAyaZAya
chmgen.obj(chmgen)
Error 42: Symbol Undefined _D3std5array20__T8appenderTAyaTyaZ8appenderFNaNbNfZS3std5array17__T8AppenderTAyaZ8Appender
chmgen.obj(chmgen)
Error 42: Symbol Undefined _D3std5range50__T3putTS3std5array17__T8AppenderTAyaZ8AppenderTaZ3putFNaNbNfKS3std5array17__T
8AppenderTAyaZ8AppenderaZv
chmgen.obj(chmgen)
Error 42: Symbol Undefined _D3std5array13__T5frontTyaZ5frontFNaNdNfAyaZw
chmgen.obj(chmgen)
Error 42: Symbol Undefined _D3std4conv11__T2toTAyaZ9__T2toTaZ2toFNaNfaZAya
chmgen.obj(chmgen)
Error 42: Symbol Undefined _D3std6format61__T11ÇåìValueTSÇäƒ5array17Çâ×8AppenderTAyaZÇèÄwTaZÇì¦FNaNfǺ¥wKÇà®üçå18üäå0FÇ
àìSpecÇä¦ÇïÅZv
chmgen.obj(chmgen)
Error 42: Symbol Undefined _D3std6format18__T10FormatSpecTaZ10FormatSpec6fillUpMFNaNfZv
chmgen.obj(chmgen)
Error 42: Symbol Undefined _D3std5range52__T3putTS3std5array17__T8AppenderTAyaZ8AppenderTAyaZ3putFNaNbNfKS3std5array17_
_T8AppenderTAyaZ8AppenderAyaZv
chmgen.obj(chmgen)
Error 42: Symbol Undefined _D3std6format18__T10FormatSpecTaZ10FormatSpec6__ctorMFNaNbNcNfxAaZS3std6format18__T10FormatS
pecTaZ10FormatSpec
chmgen.obj(chmgen)
Error 42: Symbol Undefined _D3std4conv11__T2toTAyaZ9__T2toTkZ2toFNaNfkZAya
chmgen.obj(chmgen)
Error 42: Symbol Undefined _D3std9algorithm36__T4findVAyaa6_61203d3d2062TAyaTAyaZ4findFNaNbAyaAyaZAya
chmgen.obj(chmgen)
..
..
..
Comment #20 by bus_dbugzilla — 2013-09-13T14:24:43Z
(In reply to comment #19)
>
> Failed in building chmgen
>
Yea, during linking of chmgen, same as me. The chmgen is the first tool it tries to compile using the newly-built DMD/druntime/phobos, so it looks to be the same problem you're already having. (If you then use [your temp dir]/.create_dmd_release/dmd/src/dmd to build anything else, like a hello world, then that will probably fail to link too, like it does for me.)
I would be very interested to see the results of that tool from one of the people who *isn't* having your original problem. Ex, if compiling DMD/phobos master on Windows is producing a working DMD/phobos for Kenji Hara, then does my script also work for him? Or would it successfully reproduce the same problem we're having?
Comment #21 by bus_dbugzilla — 2013-09-19T23:39:29Z
Andre: Rainer mentioned something in <http://forum.dlang.org/post/[email protected]> that solved my problem. Turns out that optlink actually reads sc.ini to get the LIB var.
Looking at the dmd zip you posted I'm pretty sure you're having the same problem. Your "dmd/bin" doesn't include link.exe (or sc.ini for that matter, but that's not the main issue here). Because of that, DMD is probably invoking a different optlink somewhere else on your PATH. That OPTLINK likely has it's *OWN* sc.ini which it read instead of yours, and therefore uses the wrong phobos.lib (or none at all).
So stick a correct sc.ici *and* OPTLINK into the same dir as dmd.exe (and make sure you don't have another dmd on the PATH), and it should work fine.
Comment #22 by bus_dbugzilla — 2013-09-19T23:44:18Z
(In reply to comment #21)
> (or sc.ini for that matter, but that's not the main issue here)
Oh I see you DO have an sc.ini in there, and it does look right. So copy OPTLINK into that same dir so OPLINK reads *that* sc.ini, and you should be good.
Comment #23 by bus_dbugzilla — 2013-09-19T23:45:33Z
(In reply to comment #22)
> (In reply to comment #21)
> > (or sc.ini for that matter, but that's not the main issue here)
>
> Oh I see you DO have an sc.ini in there, and it does look right. So copy
> OPTLINK into that same dir so OPLINK reads *that* sc.ini, and you should be
> good.
Also, copy all of the *other* LIB files from an existing DMD into your "dmd/lib".
Comment #24 by bus_dbugzilla — 2013-09-19T23:46:53Z
BTW, you don't need to copy druntime.lib because it's already included in phobos.lib.
Comment #25 by bugzilla — 2013-09-28T14:40:09Z
This appears to be a user configuration error/misunderstanding. I'm going to mark it as WORKSFORME. If you're able to find a specific dmd bug, please reopen.