digitalmars.D - shared library in D
- Frank Fischer (31/31) May 11 2004 Hi,
- John Reimer (5/43) May 11 2004 Unless things have changed, dmd still doesn't support creation of shared...
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
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, FrankUnless 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."
May 11 2004