Thanks, that did the trick.

Here's a summary post for anyone else with the same problem:

Problem:
DMD uses GCC to perform linking. On Hardened Gentoo (and derivatives like Sabayon), GCC implies -fPIE, which causes linking to fail if phobos and druntime were not compiled with -fPIC. You can check if this is the case by looking at the output of `gcc --version` - it will include the phrase Gentoo Hardened.

Workaround A:
Dynamically link Phobos instead.
$ dmd -defaultlib=:libphobos2.so -fPIC test.d

Workaround B:
Use a non-hardened compiler, such as Clang or a vanilla build of GCC. (Compiling GCC takes about 7 GB and 40 min, which makes it more expensive than actually fixing the problem).
$ env CC=/usr/bin/clang dmd test.d

Actual Fix:
Compile Phobos and Druntime with PIC=1. Note that for ebuilds, this includes the install target (which presumably does some linking).
You can then compile programs with:
$ dmd -fPIC test.d

Additional Notes:
-I've submitted a pull request to the overlay so that PIC is set automatically if hardened GCC is detected. -LDC currently has the same problem. I'll probably look at fixing it in the near future.

Reply via email to