Jump to page: 1 2
Thread overview
Linker error for d.o: relocation R_X86_64_32 against `__dmd_personality_v0'
Apr 20, 2016
rcorre
Apr 20, 2016
rcorre
Apr 20, 2016
rcorre
Apr 20, 2016
Chris
Apr 21, 2016
rcorre
Apr 21, 2016
rcorre
Apr 21, 2016
Chris
Apr 21, 2016
Rene Zwanenburg
Apr 21, 2016
rcorre
Apr 21, 2016
Rene Zwanenburg
Apr 21, 2016
rcorre
Apr 22, 2016
Rene Zwanenburg
Apr 22, 2016
Chris
Apr 23, 2016
rcorre
Apr 23, 2016
rcorre
Apr 23, 2016
Basile B.
April 20, 2016
===
$ dmd /tmp/d.d
/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
d.o: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
--- errorlevel 1
===

I'm seeing the above trying to compile a simple d program.

/tmp/d.d:
===
void main() { }
===

Any idea what this might be? I'm on dmd 2.071.0 on Archlinux.

April 20, 2016
On Wednesday, 20 April 2016 at 12:04:45 UTC, rcorre wrote:
> ===
> $ dmd /tmp/d.d
> /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
> d.o: error adding symbols: Bad value
> collect2: error: ld returned 1 exit status
> --- errorlevel 1
> ===
>
> I'm seeing the above trying to compile a simple d program.
>
> /tmp/d.d:
> ===
> void main() { }
> ===
>
> Any idea what this might be? I'm on dmd 2.071.0 on Archlinux.

My desktop is fine (Archlinux, same DMD version, both recently updated). I'm guessing this is some weird misconfiguration on my laptop that happened fairly recently.
April 20, 2016
On Wednesday, 20 April 2016 at 12:48:46 UTC, rcorre wrote:
> On Wednesday, 20 April 2016 at 12:04:45 UTC, rcorre wrote:
>> ===
>> $ dmd /tmp/d.d
>> /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
>> d.o: error adding symbols: Bad value
>> collect2: error: ld returned 1 exit status
>> --- errorlevel 1
>> ===
>>
>> I'm seeing the above trying to compile a simple d program.
>>
>> /tmp/d.d:
>> ===
>> void main() { }
>> ===
>>
>> Any idea what this might be? I'm on dmd 2.071.0 on Archlinux.
>
> My desktop is fine (Archlinux, same DMD version, both recently updated). I'm guessing this is some weird misconfiguration on my laptop that happened fairly recently.

Compiling with -fPIC doesn't help.

April 20, 2016
On Wednesday, 20 April 2016 at 12:04:45 UTC, rcorre wrote:
> ===
> $ dmd /tmp/d.d
> /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
> d.o: error adding symbols: Bad value
> collect2: error: ld returned 1 exit status
> --- errorlevel 1
> ===
>
> I'm seeing the above trying to compile a simple d program.
>
> /tmp/d.d:
> ===
> void main() { }
> ===
>
> Any idea what this might be? I'm on dmd 2.071.0 on Archlinux.

I had a similar error. Could you show us the code? Do you refer/link to a dynamic library?
April 21, 2016
On Wednesday, 20 April 2016 at 19:24:49 UTC, Chris wrote:
> On Wednesday, 20 April 2016 at 12:04:45 UTC, rcorre wrote:
>> ===
>> $ dmd /tmp/d.d
>> /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
>> d.o: error adding symbols: Bad value
>> collect2: error: ld returned 1 exit status
>> --- errorlevel 1
>> ===
>>
>> I'm seeing the above trying to compile a simple d program.
>>
>> /tmp/d.d:
>> ===
>> void main() { }
>> ===
>>
>> Any idea what this might be? I'm on dmd 2.071.0 on Archlinux.
>
> I had a similar error. Could you show us the code? Do you refer/link to a dynamic library?

The code is shown above. Literally `void main() { }`. I can't compile anything.

April 21, 2016
On Thursday, 21 April 2016 at 01:18:14 UTC, rcorre wrote:
> On Wednesday, 20 April 2016 at 19:24:49 UTC, Chris wrote:
>> On Wednesday, 20 April 2016 at 12:04:45 UTC, rcorre wrote:
>>> ===
>>> $ dmd /tmp/d.d
>>> /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
>>> d.o: error adding symbols: Bad value
>>> collect2: error: ld returned 1 exit status
>>> --- errorlevel 1
>>> ===
>>>
>>> I'm seeing the above trying to compile a simple d program.
>>>
>>> /tmp/d.d:
>>> ===
>>> void main() { }
>>> ===
>>>
>>> Any idea what this might be? I'm on dmd 2.071.0 on Archlinux.
>>
>> I had a similar error. Could you show us the code? Do you refer/link to a dynamic library?
>
> The code is shown above. Literally `void main() { }`. I can't compile anything.

s/compile/link
I _can_ compile a D library, but as soon as I try to link anything compiled with DMD it falls over.

April 21, 2016
On Thursday, 21 April 2016 at 01:20:27 UTC, rcorre wrote:

>
> s/compile/link
> I _can_ compile a D library, but as soon as I try to link anything compiled with DMD it falls over.

Sorry, I didn't see the code in your first post. I tried it myself (in only have 2.070.2) and it worked fine.

Have you had a look at

https://dlang.org/dll-linux.html

April 21, 2016
On Thursday, 21 April 2016 at 01:20:27 UTC, rcorre wrote:
> s/compile/link
> I _can_ compile a D library, but as soon as I try to link anything compiled with DMD it falls over.

What is dmd's verbose output? (add -v switch)

Some of the things it outputs are the location of the config file it uses, you can inspect that file to see if it has been borked somehow.

Near the bottom you can find the used link command, that could also reveal the problem.
April 21, 2016
On Thursday, 21 April 2016 at 09:55:30 UTC, Rene Zwanenburg wrote:
> On Thursday, 21 April 2016 at 01:20:27 UTC, rcorre wrote:
>> s/compile/link
>> I _can_ compile a D library, but as soon as I try to link anything compiled with DMD it falls over.
>
> What is dmd's verbose output? (add -v switch)
>
> Some of the things it outputs are the location of the config file it uses, you can inspect that file to see if it has been borked somehow.
>
> Near the bottom you can find the used link command, that could also reveal the problem.

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.


April 21, 2016
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.
- Is it possible the linker is picking up 32 bit libraries? That -L/usr/lib32 switch is a bit suspicious.
- What happens when you compile for 32 bit?
- 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.
- What happens when you compile some D code as a static lib, and link it with a main written in C?

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.
« First   ‹ Prev
1 2