ld issues again

Jonathan M Davis jmdavisProg at gmx.com
Sun May 15 22:58:02 PDT 2011


On 2011-05-15 22:39, Brian Myers wrote:
> Hello all,
> 
> Thanx for the assistance rendered before. I've removed all my previous
> installation attempt and installed D 2.0 under Ubuntu with the one click
> installer. Now when compiling I get the following, which is different from
> what I was getting before:
> 
> /usr/bin/ld:
> /usr/lib/gcc/x86_64-linux-gnu/4.4.3/../../../../lib32/libphobos2.a(getopt_
> 714_340.o): `_D3std6getopt10optionCharw' accessed both as normal and thread
> local symbol
> /usr/lib/gcc/x86_64-linux-gnu/4.4.3/../../../../lib32/libphobos2.a: could
> not read symbols: Success collect2: ld returned 1 exit status
> --errorlevel 1
> 
> I edited my dmd.conf because it seems to be trying to find libphobos2.a in
> the lib32 directory, and I think it needs to find it in the lib64
> directory. Don't know what the getopt error is about. Here is my dmd.conf:
> 
> 
> [Environment]
> 
> DFLAGS= -I/usr/include/d/dmd/phobos -I/usr/include/d/dmd/druntime/import
> -L-L/usr/lib64 -L- L/usr/lib32 -L--no-warn-search-mismatch
> -L--export-dynamic -L-lrt
> 
> Should I change the -L-L to just /usr/lib since that's linked to
> /usr/lib64?

dmd.conf specifically puts both the 32 and 64-bit lib directories on its path 
so that it can build for both 32 and 64-bit. And if /usr/lib is a symlink to 
/usr/lib64, then it doesn't matter which of the two is on your path. They're 
the same. Since ld is grabbing libphobos2.a from lib32, dmd obviously thinks 
that you're building a 32-bit executable. Now, if you've installed dmd as a 
64-bit executable, that's a bit odd, since it should default to building 64-
bit executables. That would seem to indicate that you're building with -m32 
(or you installed 2.052 instead of 2.053, and 2.052 didn't have a 64-bit 
executable, and it defaulted to -m32).

Regardless, ld is not complaining that lib32/libphobos2.a is not for the right 
architecture, so it definitely looks like you're trying to build a 32-bit 
executable. Now, why that isn't working, I don't know. It looks like something 
funny is going on with std.getopt. It could be that there's a problem with the 
libphobos2.a file which your program ran into and others haven't. Or it could 
just be that your libphobos2.a file is corrupted.

In any case, the folders for both the lib32 and lib64 versions of libphobos2.a 
should be in your DFLAGS. dmd/ld will grab the correct version of libphobos2.a 
depending on whether you're building a 32 or 64-bit executable. So, that 
shouldn't be the problem. It sounds more like something is wrong with your 
libphobos2.a file.

- Jonathan M Davis


More information about the Digitalmars-d mailing list