libphobos.so and loading libraries at runtime

Sean Kelly sean at invisibleduck.org
Tue Jan 7 07:36:21 PST 2014


On Sunday, 5 January 2014 at 20:47:44 UTC, FreeSlave wrote:
> import core.runtime;
>
> int main()
> {
>     Runtime.loadLibrary("does not care");
>     Runtime.unloadLibrary(null);
>     return 0;
> }
>
> When I try to compile this code with 'dmd main.d', I get errors
>
> main.o: In function 
> `_D4core7runtime7Runtime17__T11loadLibraryZ11loadLibraryFxAaZPv':
> main.d:(.text._D4core7runtime7Runtime17__T11loadLibraryZ11loadLibraryFxAaZPv+0x4d): 
> undefined reference to `rt_loadLibrary'
> main.o: In function 
> `_D4core7runtime7Runtime19__T13unloadLibraryZ13unloadLibraryFPvZb':
> main.d:(.text._D4core7runtime7Runtime19__T13unloadLibraryZ13unloadLibraryFPvZb+0x8): 
> undefined reference to `rt_unloadLibrary'
>
> But it's built without errors when I separate compile and link 
> parts:
> dmd -c main.d
> gcc main.o -lphobos2 -o main
>
> I checked libraries with nm utility and actually found no such 
> symbols in static version of libphobos. But shared one has 
> these symbols.
>
> Well, I'm aware of that runtime loading requires shared version 
> of phobos2 to avoid duplicating of D runtime. But why does dmd 
> use static linking by default? Is shared version of phobos 
> still experimental? Anyway we need some remarks in 
> documentation about the lack of these functions in static 
> version of phobos.

This seems like a weird change if intentional, since the function 
is publicly declared. I'd file a bug report.


More information about the Digitalmars-d-learn mailing list