[fpc-pascal] linux: should we hard-code versioned or unversioned shared libraries in our apps?

Graeme Geldenhuys graemeg.lists at gmail.com
Wed Aug 15 15:14:38 CEST 2012


On 15 August 2012 12:49, Jonas Maebe <jonas.maebe at elis.ugent.be> wrote:
> You said that you manually created the symbolic link. I simply explained that you should
> never do that, and instead install the development packages because they will do that
> (correctly) for you.

So my applications that I deploy to clients will now require -devel
packages? This just doesn't sound sane, sorry. Maybe there is just a
fundamental flaw in all distros and how they package software.
Initially a great idea (in theory), but in reality it is seriously

> Whether or not it is desirable for the FCL/Synapse units to require an unversioned
> symlink to be present is a separate issue.

FCL-DB uses dynamic linking by default, and looks for the unversioned
shared library. So what specific Firebird version is the FCL-DB coded
too? Because remember, libfbclient.so can point to a v1.x or a v2.x -
depending on what -devel package was installed.

This uncertain (version mismatch) is what I would like to avoid, plus
the fact that my clients now need to install -devel packages too.

Maybe I should simply install my apps into /home/<user>/<appname>. My
installer would then ship the required/expected *.so files, and setup
the unversioned symlink. My app would then be launched via a script
which sets the LD_LIBRARY_PATH to the application directory. My app
would then be totally self-contained. This seems like the only way to
get around these flawed package management rules and dependencies.

> It will point to the library of the version corresponding to the dev/devel package that has been installed.

So one minute it could point to a v1.x library, and the next it could
point to a v2.x library. This will surely break many apps that only
look at the unversioned symlink.

> libfbclient.so.2.0 means Firebird 2.0.x. libfbclient.so.2 means Firebird 2.x.

OK, thanks for that.

My apps are tiOPF based, and tiOPF uses the bare minimum functionality
from each backend database server. Basically just the CRUD (create,
read, update and delete) functions. So even though I say our apps use
Firebird DB v2.x, it will most probably run on a v1.x system too, but
like I said, that would be untested. We only test with v2.x Firebird

  - Graeme -

fpGUI - a cross-platform Free Pascal GUI toolkit

More information about the fpc-pascal mailing list