Thread overview | |||||||
---|---|---|---|---|---|---|---|
|
July 26, 2017 Bind D as a shared lib for ldc | ||||
---|---|---|---|---|
| ||||
Hi, I would like to bind D as a shared library so that I can call it from Ruby using FFI . I found out how to do it with DMD from this [post](https://wiki.dlang.org/Call_D_from_Ruby_using_FFI). But how should I so I do it with LDC? I tried the example from above post and get the following error: ``` $ ldc2 -shared -m64 -relocation-model=pic i.d /usr/bin/ld: /home/prasun/ldclatest/ldc-1.1.0-pk9rkm4zvdp6pglam7s2/lib/libdruntime-ldc.a(errno.c.o): relocation R_X86_64_PC32 against undefined symbol `__errno_location@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC /usr/bin/ld: final link failed: Bad value collect2: error: ld returned 1 exit status Error: /usr/lib/nvidia-cuda-toolkit/bin/gcc failed with status: 1 ``` Regards, Prasun |
July 26, 2017 Re: Bind D as a shared lib for ldc | ||||
---|---|---|---|---|
| ||||
Posted in reply to Prasun Anand | $ ldc2 -version LDC - the LLVM D compiler (1.1.0): based on DMD v2.071.2 and LLVM 3.7.1 built with LDC - the LLVM D compiler (0.17.1) Default target: x86_64-unknown-linux-gnu Host CPU: bdver2 http://dlang.org - http://wiki.dlang.org/LDC Registered Targets: aarch64 - AArch64 (little endian) aarch64_be - AArch64 (big endian) amdgcn - AMD GCN GPUs arm - ARM arm64 - ARM64 (little endian) armeb - ARM (big endian) bpf - BPF (host endian) bpfeb - BPF (big endian) bpfel - BPF (little endian) cpp - C++ backend hexagon - Hexagon mips - Mips mips64 - Mips64 [experimental] mips64el - Mips64el [experimental] mipsel - Mipsel msp430 - MSP430 [experimental] nvptx - NVIDIA PTX 32-bit nvptx64 - NVIDIA PTX 64-bit ppc32 - PowerPC 32 ppc64 - PowerPC 64 ppc64le - PowerPC 64 LE r600 - AMD GPUs HD2XXX-HD6XXX sparc - Sparc sparcel - Sparc LE sparcv9 - Sparc V9 systemz - SystemZ thumb - Thumb thumbeb - Thumb (big endian) x86 - 32-bit X86: Pentium-Pro and above x86-64 - 64-bit X86: EM64T and AMD64 xcore - XCore Regards, Prasun |
July 26, 2017 Re: Bind D as a shared lib for ldc | ||||
---|---|---|---|---|
| ||||
Posted in reply to Prasun Anand | On Wednesday, 26 July 2017 at 06:53:36 UTC, Prasun Anand wrote: > $ ldc2 -shared -m64 -relocation-model=pic i.d > /usr/bin/ld: /home/prasun/ldclatest/ldc-1.1.0-pk9rkm4zvdp6pglam7s2/lib/libdruntime-ldc.a(errno.c.o): relocation R_X86_64_PC32 against undefined symbol `__errno_location@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC The druntime and Phobos libraries you're linking against are static ones and haven't been compiled as position-independent-code. The LDC 1.3 package ships with shared runtime libs too; select them via `-defaultlib=druntime-ldc-shared,phobos2-ldc-shared -debuglib=druntime-ldc-debug-shared,phobos2-ldc-debug-shared`, that should work. |
July 26, 2017 Re: Bind D as a shared lib for ldc | ||||
---|---|---|---|---|
| ||||
Posted in reply to Prasun Anand | Hi Prasun,
On 26 Jul 2017, at 7:53, Prasun Anand via digitalmars-d-ldc wrote:
> But how should I so I do it with LDC?
>
> I tried the example from above post and get the following error:
>
> ```
> $ ldc2 -shared -m64 -relocation-model=pic i.d
> /usr/bin/ld: /home/prasun/ldclatest/ldc-1.1.0-pk9rkm4zvdp6pglam7s2/lib/libdruntime-ldc.a(errno.c.o): relocation R_X86_64_PC32 against undefined symbol `__errno_location@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC
> /usr/bin/ld: final link failed: Bad value
> collect2: error: ld returned 1 exit status
> Error: /usr/lib/nvidia-cuda-toolkit/bin/gcc failed with status: 1
> ```
You need to use a version of LDC built with shared druntime/Phobos – the static ones (libdruntime-ldc.a in the linker error message) are not compatible with creating shared libraries.
— David
|
July 29, 2017 Re: Bind D as a shared lib for ldc | ||||
---|---|---|---|---|
| ||||
Posted in reply to David Nadlinger | Thanks Kinke and David :) Regards, Prasun |
Copyright © 1999-2021 by the D Language Foundation