[fpc-pascal]How to use Linux libraries?
Marco van de Voort
marcov at stack.nl
Sat Jul 26 11:45:10 CEST 2003
> > use them in the same manner, by loading them and talking to them?
> Yes Rainer, .dll and .so are the same. Generally speaking they are files
> that contains code fragments (functions) much like an executable but that
> can be loaded dynamically at runtime.
> To use an .so library you need to load it in your program. Check the FPC
> docs (http://www.freepascal.org/docs-html/prog/progch11.html#x197-19900011)
> Under windows you can use LoadLibrary, GetProcAddress (to load functions)
> and FreeLibrary, these functions are defined in the windows unit.
> Under Linux you have to use dlopen, dlsym, dlclose which are in the shared
> library 'dl'. As far as I know there is no interface to this library but
> they are really easy to setup in your program:
Don't! Use unit dynlibs. (there are some examples in docs/dynlibex)
Dynlibs is basically a very small wrapper that encapsulates this. However
it will avoid quite a few platform dependant ifdef's.
> //taken from the FPC OpenGL package by Sebastian Guenther (?)
> RTLD_LAZY = $001;
> RTLD_NOW = $002;
> RTLD_BINDING_MASK = $003;
> function dlopen(Name: PChar; Flags: LongInt) : Pointer; extdecl; external
> function dlsym(Lib: Pointer; Name: PChar) : Pointer; extdecl; external
> function dlclose(Lib: Pointer): LongInt; extdecl; external 'dl';
Since e.g. these are exactly the same on BSD, just in lib 'c'.
More information about the fpc-pascal