Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 14 Apr 2010 12:48:53 -0500
From:      Dan Nelson <dnelson@allantgroup.com>
To:        Leinier Cruz Salfran <salfrancl.listas@gmail.com>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: there is a way to avoid strict libraries linking?
Message-ID:  <20100414174853.GC43908@dan.emsphone.com>
In-Reply-To: <n2ya2585ef1004140923s2acb8b2ctf7c9b449cb66f208@mail.gmail.com>
References:  <n2ya2585ef1004140923s2acb8b2ctf7c9b449cb66f208@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
In the last episode (Apr 14), Leinier Cruz Salfran said:
> i want to know if there is a possibility to avoid current strict libraries
> linking ..  i will explain myself
> 
> for example .. i have installed 'gtk' (2.18) that depends on library
> 'libpng.so.5' (png) ..  and i will upgrade 'png' port to a superior
> version that install the library 'libpng.so.6' BUUUTTTT 'gtk' will not be
> upgraded, so it will still depending on 'libpng.so.5' ..  so here is my
> question: there is a way to avoid this??????  i means that 'gtk' load
> 'libpng.so' (that is a symbolic link to 'libpng.so.6') instead of
> 'libpng.so.5' at runtime

The whole reason for a library version bump is because the libraries are not
compatible with each other, usually due to a function being removed or its
argument list changing, or a structure changing size.  Symlinking one
version onto another version might work, but only if the application doesn't
use any of the removed or changed functions. 
http://article.gmane.org/gmane.comp.graphics.png.devel/3283

It's much safer to just leave the libraries alone.  Just because you
upgraded libpng doesn't mean that your old gtk binary will stop working
(assuming you are using "portupgrade" or "portmaster -w" which preserves old
libraries of course).  Anyway, the FreeBSD port maintainers usually bump the
revision of dependant ports when a major library like libpng gets upgraded,
to force everyone to upgrade anything that depends on it.

> i think this is a VERY VERY strict rule because in linux programs load
> 'lib*.so' instead 'lib*.so.#' except if that program was linked to
> 'lib*.so.#' at compilation time

no, the rule is the same in Linux.  Programs load "lib*.so.#" there also:

(dan@linuxbox) ~># ldd /usr/bin/rrdtool
        linux-vdso.so.1 =>  (0x00007fff4f9ff000)
        librrd.so.2 => /usr/lib64/librrd.so.2 (0x00007fa047716000)
        libfreetype.so.6 => /usr/lib64/libfreetype.so.6 (0x00007fa04759b000)
        libpng.so.3 => /usr/lib64/libpng.so.3 (0x00007fa04745f000)
        libz.so.1 => /lib64/libz.so.1 (0x00007fa04734b000)
        libart_lgpl_2.so.2 => /usr/lib64/libart_lgpl_2.so.2 (0x00007fa047234000)
        libm.so.6 => /lib64/libm.so.6 (0x00007fa0470df000)
        libc.so.6 => /lib64/libc.so.6 (0x00007fa046e9f000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fa04785e000)

-- 
	Dan Nelson
	dnelson@allantgroup.com



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20100414174853.GC43908>