dynamic library building and loading

Maxim Fomin maxim at maxim-fomin.ru
Thu Sep 27 01:04:14 PDT 2012


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)



More information about the Digitalmars-d mailing list