On Thursday, 27 February 2014 at 06:25:45 UTC, Tolga Cakiroglu wrote:
I am trying to compile a shared library on Linux and use it.

lib.d
---------------------------
import core.runtime;

class A{}

extern(C) void foo(){
        Object obj = new Object();

        A objA = new A();

        char[] c = new char[ 1024 ];

        destroy( objA );
        destroy( c );
}


makefile:
--------------------------
lib:
        dmd -c lib.d -fPIC -debug -gc -g -w -wi
        gcc --shared lib.o -o lib.so


After getting the `foo` symbol in the app by using dlsym, I call it, the following is output on the shell:

library is loaded now
Running functions...
./app: symbol lookup error: ./lib.so: undefined symbol: rt_finalize


Where exactly is that function linked into an application? and why is it not linked into the library? Does it require an extra flag?

because there is no finalize. rt_init/rt_term is what you need

https://github.com/D-Programming-Language/druntime/blob/master/src/core/runtime.d#L30

Reply via email to