View mode: basic / threaded / horizontal-split · Log in · Help
May 11, 2004
shared library in D
Hi,

I want to write a shared library in D for use with C-code. The following
code shows a little example:

----
class A
{
 public:
   this()
   {
   }
}

extern(C) {
 void myfunc()
 {
   A a = new A();
 }
}
----

The function "myfunc" should be accessed from the C-code. But when I try
to create the shared library, I get the following error:

% dmd -O -release -c test.d
% gcc -shared test.o -lphobos
/usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.2/../../../../i686-pc-linux-gnu/bin/ld:
a.out: undefined versioned symbol name _d_throw@4
/usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.2/../../../../i686-pc-linux-gnu/bin/ld:
failed to set dynamic section sizes: Bad value
collect2: ld returned 1 exit status

So, what can be done (is it possible in general, what linker options are 
missed, what parts of D code are missing ...)?

Thx,
Frank
May 11, 2004
Re: shared library in D
Frank Fischer wrote:
> Hi,
> 
> I want to write a shared library in D for use with C-code. The following
> code shows a little example:
> 
> ----
> class A
> {
>   public:
>     this()
>     {
>     }
> }
> 
> extern(C) {
>   void myfunc()
>   {
>     A a = new A();
>   }
> }
> ----
> 
> The function "myfunc" should be accessed from the C-code. But when I try
> to create the shared library, I get the following error:
> 
> % dmd -O -release -c test.d
> % gcc -shared test.o -lphobos
> /usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.2/../../../../i686-pc-linux-gnu/bin/ld:
> a.out: undefined versioned symbol name _d_throw@4
> /usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.2/../../../../i686-pc-linux-gnu/bin/ld:
> failed to set dynamic section sizes: Bad value
> collect2: ld returned 1 exit status
> 
> So, what can be done (is it possible in general, what linker options are 
> missed, what parts of D code are missing ...)?
> 
> Thx,
> Frank

Unless things have changed, dmd still doesn't support creation of shared 
libraries on the Linux platform.

See http://www.digitalmars.com/d/dcompiler.html.  Look under Linux Bugs: 
"Shared libraries cannot be generated."
Top | Discussion index | About this forum | D home