On 2012-09-27 10:04, Maxim Fomin wrote:
On Thursday, 27 September 2012 at 05:52:44 UTC, Jens Mueller
wrote:
Maxim Fomin wrote:
You can build shared libraries on linux by manually compiling object
files and linking them. On windows last time I tries it was not
possible.
Can you give detailed steps for doing this on Linux? Because nobody as
far as I know has made this work yet?
Jens
Dpaste seems not working, so, sorry for code
----lib.d---
import std.stdio;
static this()
{
writeln("module ctor");
}
static ~this()
{
writeln("module dtor");
}
class A
{
private string text;;
this(string text)
{
writeln("class ctor");
this.text = text;
}
void tell()
{
writeln(this.text);
}
~this()
{
writeln(this.text);
writeln("dtor");
}
static this()
{
writeln("static ctor");
}
static ~this()
{
writeln("static dtor");
}
}
---------------
-----main.d----
import lib;
void main()
{
auto a = new A("some text");
a.tell();
}
---------------
dmd -c -fPIC lib.d
gcc -shared lib.o -o liblib.so
dmd -c main.d
gcc main.o -llib -lphobos2 -lrt -lpthread -L. -Wl,-rpath=.
./a.out
ldd a.out
linux-vdso.so.1 (0x00007fff703ff000)
liblib.so => ./liblib.so (0x00007f48158f1000)
librt.so.1 => /lib64/librt.so.1 (0x00007f48156cd000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f48154b1000)
libc.so.6 => /lib64/libc.so.6 (0x00007f481510c000)
/lib64/ld-linux-x86-64.so.2 (0x00007f4815af4000)
1. Does this actually run?
2. This is statically linked with druntime and Phobos. What happens when
you create an executable that links with the D dynamic library?
Last time I tried this (on Mac OS X) I got several symbols missing. This
was all symbols that are usually pointing to the executable, inserted by
the compiler. One of them would be "main" and symbols like these:
https://github.com/D-Programming-Language/druntime/blob/master/src/rt/deh2.d#L27
--
/Jacob Carlborg