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.