[fpc-pascal] Is it possible to link to SO libraries that have filename ending like '.so.0'

Michalis Kamburelis michalis at camelot.homedns.org
Wed Jan 5 17:52:31 CET 2005

Peter Vreman wrote:
>>This problem arised with recent change to JEDI-SDL, but it seems a
>>general problem with linking to libraries under UNIXes.
>>Before the change, JEDI-SDL headers linked to libraries named like
>>'libSDL.so', using constructs that looked like (after removing preproc
>>$ifdefs and resolving constants)
>>   procedure SDL_Quit; cdecl; external 'libSDL.so';
>>and it worked OK. Of course, libSDL.so was on all systems only a symlink
>>to an actual so file, e.g. to 'libSDL-1.2.so.0.7.0' on my system.
>>However, recently we're trying to link to 'libSDL-1.2.so.0', to make
>>sure that at compilation time we're linking to proper SDL version (since
>>JEDI-SDL headers were always supposed to work only with "rather new" SDL
>>version, not with "every possible SDL version". As is the case with most
>>header units.) But the problem is that doing
>>   procedure SDL_Quit; cdecl; external 'libSDL-1.2.so.0';
>>fails at linking with
>>   /usr/bin/ld: cannot find -lSDL-1.2
>>   link_so_filename.dpr(4,1) Error: Error while linking
>>So it seems that fpc passes to ld -lSDL-1.2, and ld looks for
>>'libSDL-1.2.so' (without '.0' suffix). Honestly, I don't know what one
>>should pass to ld to tell it to link to 'libSDL-1.2.so.0'.
>>Question: Can this be somehow fixed in FPC ? Or is it just impossible
>>for FPC to say such thing to ld (so we have another problem that can't
>>be solved because FPC uses external linker) ?
>>In another words, should this be considered something that must be fixed
>>in JEDI-SDL (by changing lib name back to 'libSDL.so') or can this be
>>fixed in newer FPC versions ? Or maybe it's all already working, but I
>>have to pass some command-line parameter to FPC or use some {$...}
>>preprocessor directive to make it work ?
> It is not possible for the compiler to detect if you want to link to a
> specific version or to the generic .so file. If you specify a complete
> filename then you must also pass the correct path where the file is
> located (In most cases /usr/lib) otherwise the linker can't find it. That
> means that the compiler needs to search for the file. This is not
> implemented.

You mean that
   procedure SDL_Quit; cdecl; external '/usr/lib/libSDL-1.2.so.0';
should work ? But it does not, fails with the same error as before. And 
I see that link.res sill contains lines


Or do you mean by "This is not implemented" that for now compiler always 
strips path and extensions from specified library name, so even doing 
"external '/usr/lib/libSDL-1.2.so.0'" is not supposed to work now ?


More information about the fpc-pascal mailing list