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 <armstrong...@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.

Reply via email to