gdc compiler/linker error

Neil Vice psgdg at swiftdsl.com.au
Fri Apr 18 08:52:33 PDT 2008


"Jonathan Crapuchettes" <jcrapuchettes at gmail.com> wrote in message 
news:fu8iu2$98s$1 at digitalmars.com...
>I am getting a linker error when I try to compile my code as follows:
>
> jonathan at blackbeard:~/workspace/ccb/matrix$ gdmd test.d Matrix.d Vector.d 
> Util.d 
> ../MySQLConnection.d -unittest -I../.. -L/usr/lib/atlas/libptcblas.a -L/usr/lib/atlas/liblapack.a 
>  -L/usr/lib/atlas/libatlas.a -L/usr/lib/atlas/libcblas.a -L/usr/lib/atlas/libblas.a 
>  -L/usr/lib/libmysqlclient.so -vdmd
> /usr/bin/gdc -funittest -I ../.. -c test.d -o test.o
> /usr/bin/gdc -funittest -I ../.. -c Matrix.d -o Matrix.o
> /usr/bin/gdc -funittest -I ../.. -c Vector.d -o Vector.o
> /usr/bin/gdc -funittest -I ../.. -c Util.d -o Util.o
> /usr/bin/gdc -funittest -I ../.. -c ../MySQLConnection.d -o 
> MySQLConnection.o
> /usr/bin/gdc -funittest -I ../.. test.o Matrix.o Vector.o Util.o 
> MySQLConnection.o -Wl,/usr/lib/atlas/libptcblas.a -Wl,/usr/lib/atlas/liblapack.a 
>  -Wl,/usr/lib/atlas/libatlas.a -Wl,/usr/lib/atlas/libcblas.a -Wl,/usr/lib/atlas/libblas.a 
>  -Wl,/usr/lib/libmysqlclient.so -o test
> Util.o: In function `_D3ccb6matrix4Util11__unittest0FZv':
> Util.d:(.text+0x2ec4): undefined reference to 
> `_D3ccb15MySQLConnection15mysqlConnection7__ClassZ'
> Util.d:(.text+0x2f22): undefined reference to 
> `_D3ccb15MySQLConnection15mysqlConnection5_ctorMFAaAaAaAaZC3ccb15MySQLConnection15mysqlConnection'
> collect2: ld returned 1 exit status
>
> I am trying to use gdc for its 64-bit compilation, but this is a problem. 
> I checked the compiled code inside MySQLConnection.o with objdump and 
> found that _D3ccb15MySQLConnection15MysqlConnection7__ClassZ exists. The 
> only different between this label and the one that is causing the error is 
> the m in the last term. The name of the class is MysqlConnection.
>
> I am using gdc (GCC) 4.1.3 20070831 (prerelease gdc 0.25, using dmd 1.021) 
> (Ubuntu 0.25-4.1.2-16ubuntu1).
>
> What can I do to get this is compile and link?
>
> Thank you taking to read this,
> JC

I don't see why a single compiler would generate two different mangled names 
for the same identifier. As such, I wonder where the two object files 
involved were obtained from? Could they have been built with different 
compiler versions somehow? Did you obtain one of them as a binary? If so, 
perhaps the case in the associated extern declaration is incorrect...

I also know that DMD acts differently if you compile a series of files in 
the one command or compile each seperately and the link. Don't think this 
would apply to GDC but another thought...

Good luck




More information about the Digitalmars-d-learn mailing list