On Tue, 2014-02-04 at 07:13 +0000, Artem Tarasov wrote: > On Sunday, 2 February 2014 at 15:31:30 UTC, Russel Winder wrote: > > result is: > > > > |> LD_LIBRARY_PATH=. python execute.py > > Segmentation fault > > You should call Runtime.initialize() prior to calling any other D > functions.
Hummm… obvious once pointed out :-) Thanks for doing exactly that. The question is how to get this run. I tried a module initializer: static this() { Runtime.initialize(); } but this module never actually gets loaded per se, so that is never going to work. So this means calling a C linkage function to do the initialization in every entry point: import core.runtime: Runtime; import std.stdio: writeln; auto initialized = false; extern (C) void initializeIfNotAlreadyDone() { if (!initialized) { Runtime.initialize(); initialized = true; } } extern(C) { void sayHello() { initializeIfNotAlreadyDone(); writeln("Hello World."); } } works a treat: scons: Building targets ... dmd -I. -fPIC -c -fPIC -ofhelloWorld.o helloWorld.d dmd -shared -defaultlib=libphobos2.so -oflib_helloWorld.so helloWorld.o -fPIC -L-L. LD_LIBRARY_PATH=. python execute.py Hello World. scons: done building targets. So D extensions to CPython are possible without PyD! Now to continue with PyD anyway so as to compare and contrast. -- Russel. ============================================================================= Dr Russel Winder t: +44 20 7585 2200 voip: sip:russel.win...@ekiga.net 41 Buckmaster Road m: +44 7770 465 077 xmpp: rus...@winder.org.uk London SW11 1EN, UK w: www.russel.org.uk skype: russel_winder