April 11, 2009 Linux Shared Library Fun | ||||
|---|---|---|---|---|
| ||||
So, I've been messing around with creating shared libraries in D and then dynamically loading them into another D program and calling the functions. Thus far this is very simple: just using a function that prints "hello" in the library and then the main program loads it. This whole thing works perfectly if the library is created in C and compiled into a .so with gcc. Fun problems arise when I try to compile the library in D with gdc (since dmd does not support creation of libraries under Linux... which makes me sad). The compilation and creation of the library itself is fine... However, when I try to load the library in the main program it comes up with this fun error: ./testlib.so: undefined symbol: __data_start I'm using dlopen, dlsym, etc to pull stuff from the library. I also tried std.loader but since it's basically a front-end to dlopen the same error occurs. nm indeed shows that __data_start is undefined in the compiled D library. I've tried lazy binding and that does not solve the problem either. Any ideas would be appreciated. | ||||
April 11, 2009 Re: Linux Shared Library Fun | ||||
|---|---|---|---|---|
| ||||
Posted in reply to jeff | jeff wrote:
> So, I've been messing around with creating shared libraries in D and then dynamically loading them into another D program and calling the functions. Thus far this is very simple: just using a function that prints "hello" in the library and then the main program loads it.
>
> This whole thing works perfectly if the library is created in C and compiled into a .so with gcc. Fun problems arise when I try to compile the library in D with gdc (since dmd does not support creation of libraries under Linux... which makes me sad). The compilation and creation of the library itself is fine... However, when I try to load the library in the main program it comes up with this fun error:
> ./testlib.so: undefined symbol: __data_start
>
> I'm using dlopen, dlsym, etc to pull stuff from the library. I also tried std.loader but since it's basically a front-end to dlopen the same error occurs.
>
> nm indeed shows that __data_start is undefined in the compiled D library. I've tried lazy binding and that does not solve the problem either.
>
> Any ideas would be appreciated.
And also I apologize profusely in advance if this isn't the proper newsgroup to put this in...
| |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply