On Thursday, 21 April 2016 at 12:57:36 UTC, Rene Zwanenburg wrote:
On Thursday, 21 April 2016 at 11:54:27 UTC, rcorre wrote:

Thanks for the tip. Here's the linking code it shows:


cc d.o -o d -m64 -L/usr/lib -L/usr/lib32 -Xlinker --export-dynamic -Xlinker -Bstatic -lphobos2 -Xlinker -Bdynamic -lpthread -lm -lrt -ldl /usr/bin/ld: d.o: relocation R_X86_64_32 against `__dmd_personality_v0' can not be used when making a shared object; recompile with -fPIC

I tried `cc d.o -o d -m64 -fPIC and still get the error.

Right, the -fPIC should be used while compiling the source code, but that's a gcc option. I think DMD is supposed to always generates position independent code.

Here are a few things you can try to narrow the problem down. I'm not too familiar with this stuff though, so I'm just shooting in the dark here and not all of it may make sense ^^

- What happens when you mark main() as nothrow? That personality symbol has to do with exception handling.

Nothing.

- Is it possible the linker is picking up 32 bit libraries? That -L/usr/lib32 switch is a bit suspicious.

Sure is. I tried manually linking without that but get the same error. As a matter of fact, I tried removing all the linker flags and still get that error (just `cc d.o -o d`).

- What happens when you compile for 32 bit?

/usr/bin/ld: skipping incompatible /usr/lib/libphobos2.a when searching for -lphobos2 /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-unknown-linux-gnu/5.3.0/../../../libphobos2.a when searching for -lphobos2 /usr/bin/ld: skipping incompatible /usr/lib/libphobos2.a when searching for -lphobos2
/usr/bin/ld: cannot find -lphobos2
/usr/bin/ld: skipping incompatible /usr/lib/libpthread.so when searching for -lpthread /usr/bin/ld: skipping incompatible /usr/lib/libpthread.a when searching for -lpthread
collect2: error: ld returned 1 exit status

- What happens when you compile a binary without phobos and druntime, and with a custom entry point? I've never done that myself and don't remember how to do that off the top of my head, but the info should be somewhere on dlang.org.

I'll look into it.

- What happens when you compile some D code as a static lib, and link it with a main written in C?

Same error.

Oh, and I take it you've already tried to simply reinstall DMD? If you uninstall DMD, look if there are still sc.ini's and libphobos.a's floating around.

I did. /etc/dmd.conf looks normal, aside from the inclusion of 32-bit libs:

[Environment]
DFLAGS=-I/usr/include/dlang/dmd -L-L/usr/lib -L-L/usr/lib32 -L--export-dynamic

But that's how it gets set up after a fresh install.

Reply via email to