On Saturday, 14 June 2014 at 10:45:25 UTC, Mike Wey wrote:
On 06/14/2014 03:58 AM, Reuben wrote:
Hi,
I'm new to D and am trying to compile a simple hello world program.
I get the following error when compiling it:

dmd test.d
/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/../../../../x86_64-pc-linux-gnu/bin/ld:
/opt/dmd-2.065/lib64/libphobos2.a(lifetime_488_4cd.o): relocation R_X86_64_32 against `_D15TypeInfo_Shared7__ClassZ' can not be used when
making a shared object; recompile with -fPIC
/opt/dmd-2.065/lib64/libphobos2.a: could not read symbols: Bad value
collect2: error: ld returned 1 exit status
--- errorlevel 1

This error occurs regardless of whether I use the -fPIC option or not.
Compiling DMD from source does not change anything.

I am using DMD 2.065.0 on Sabayon amd64, compiled from the dlang overlay
with gcc (Gentoo Hardened 4.7.3-r1 p1.4, pie-0.5.5) 4.7.3.

Thanks in advance.

From the error it looks like you are compiling test.d as shared while linking against the static version of the standard library.

If "dmd test.d" is the command being run there probably is an error in with the configuration in dmd.conf, the conf file is probably in /etc.

Depending on the desired behavior you'll need to remove the -shared flag from the configuration or add -defaultlib=:libphobos2.so

dmd.conf contains the default settings. I haven't specified -shared anywhere. The only thing I can think of is that if -fPIC is required, DMD might be implying it somehow.

Compiling with -defaultlib seems to have fixed it. I'm getting a warning, but the program compiles and seems to run OK.

dmd -defaultlib=:libphobos2.so -fPIC test.d
/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/../../../../x86_64-pc-linux-gnu/bin/ld: test.o: warning: relocation in readonly section `.rodata'. /usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/../../../../x86_64-pc-linux-gnu/bin/ld: warning: creating a DT_TEXTREL in object.

Is the warning something I should be worried about?

Reply via email to