Compilation problems with GDC/GCC
DRex via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sat Apr 15 06:02:43 PDT 2017
On Saturday, 15 April 2017 at 12:45:47 UTC, DRex wrote:
> On Friday, 14 April 2017 at 18:00:22 UTC, Johannes Pfau wrote:
>> Am Fri, 14 Apr 2017 13:03:22 +0000
>> schrieb DRex <armstronga94 at hotmail.com>:
>>
>>
>> GDC should generally only need to link to -lgdruntime (and
>> -lgphobos if you need it). However, if you really link using
>> ld you'll have to provide the C startup files, -lc and similar
>> stuff for C as well, which gets quite complicated.
>>
>> You'll have to post the exact commands you used and some
>> of the missing symbol names so we can give better answers.
>>
>> -- Johannes
>
> okay so here is an outline of the situation:
>
> The project is a rather large C project that is being ported to
> D (small pieces at a time) and as I said before, it's make
> files are simply way too complicated t unravel and rewrite (the
> main make file has 5000 some lines of code).
>
> I have re-written some small elements of C code so far in D. I
> need to compile the D code into object (*.o) files, and simply
> including them as references in the make files doesn't work
> because ld on its own doesn't know how to link D files (as I
> assume it doesn't by default know to link the object files with
> the D runtime).
>
> On small projects with C and D (test projects for including D
> with C) showed that I can simply replace ld with gdc when I go
> to link, i.e. instead of `ld cfile.o dfile.o -o foo` I can use
> `gdc cfile.o dfile.o -o foo` and it will link the objects
> together and make the program. However this is not a viable
> solution to the project without navigating through the make
> files, as there are some options that are passed to the linker
> that GDC doesn't seem to recognize, and this build fails.
>
> After reading the above comment, I have tried linking with `ld
> *options* -lgdruntime`, which failed, I also tried specifying
> the druntime lib with its full path
> '-l:/usr/gcc/x86_64-linux-gnu/5/libgdruntime.a' and derivatives
> thereof and ld says it cannot find it. UPDATE: using -L
> instead of -l seems to have worked, but I am now recieveing a
> lot of 'undefined referece' errors, so many that I wont write
> them here, but some of them are:
>
> `test.o: In function `main':
> test.d:(.text+0x21): undefined reference to `_d_run_main'
>
> `test.o: In function `_D4test9__modinitFZv':
> test.d:(.text+0xaa): undefined reference to `_Dmodule_ref'`
>
> `test.o:(.data+0x10): undefined reference to
> `_D3std5stdio12__ModuleInfoZ'`
Update: using the --verbose option of ld, it has printed out
attempts to open the library (when using `-lgdruntime` the output
is as follows:
attempt to open //usr/local/lib/x86_64-linux-gnu/libgdruntime.so
failed
attempt to open //usr/local/lib/x86_64-linux-gnu/libgdruntime.a
failed
attempt to open //lib/x86_64-linux-gnu/libgdruntime.so failed
attempt to open //lib/x86_64-linux-gnu/libgdruntime.a failed
attempt to open //usr/lib/x86_64-linux-gnu/libgdruntime.so failed
attempt to open //usr/lib/x86_64-linux-gnu/libgdruntime.a failed
attempt to open //usr/local/lib64/libgdruntime.so failed
attempt to open //usr/local/lib64/libgdruntime.a failed
attempt to open //lib64/libgdruntime.so failed
attempt to open //lib64/libgdruntime.a failed
attempt to open //usr/lib64/libgdruntime.so failed
attempt to open //usr/lib64/libgdruntime.a failed
attempt to open //usr/local/lib/libgdruntime.so failed
attempt to open //usr/local/lib/libgdruntime.a failed
attempt to open //lib/libgdruntime.so failed
attempt to open //lib/libgdruntime.a failed
attempt to open //usr/lib/libgdruntime.so failed
attempt to open //usr/lib/libgdruntime.a failed
attempt to open //usr/x86_64-linux-gnu/lib64/libgdruntime.so
failed
attempt to open //usr/x86_64-linux-gnu/lib64/libgdruntime.a failed
attempt to open //usr/x86_64-linux-gnu/lib/libgdruntime.so failed
attempt to open //usr/x86_64-linux-gnu/lib/libgdruntime.a failed
I don't see why it is failing, because the second attempt is the
right path, the libgdruntime.a file is exactly at
"/usr/local/lib/x86_64-linux-gnu/libgdruntime.a", although I do
not know why it is using double forward slash as the root :s,
which I cannot seem to stop it from doing.
More information about the Digitalmars-d-learn
mailing list