shared libraries / ldconfig / LD_LIBRARY_PATH kerdes

Sziasztok,

a cimben szereplo shared libraries / ldconfig / LD_LIBRARY_PATH-rol lenne egy erdeklodo kerdesem. Igazabol nincs gondom, csak nem ertem teljesen hogy mukodik.

Adott egy python2.7.3 telepitett shell RHEL5.8-as masinan, ahonnan IBM MQ csatornakba kene belepni, lekerdezni, meghivni dolgokat stb. Ehhez van egy remek kis plugin a PyMQI .

Ahogy az mar lenni szokott, hogy ez rendesen mukodjon kellenek neki az mqm (mq cliens) lib-jei.

Na mar most kerdesem az lenne, hogy mi a kulonbseg es mi a jobb megoldas:

1, a user .bash_profile-jaba (vagy a kozos /etc/profiles-ba) bele rakom egyszeruen a kovetkezo sort:

export LD_LIBRARY_PATH=/opt/mqm/lib64

2, ldconfig paranncsal "ossze linkelni", vagyis $ldconfig /opt/mqm/lib64

Mindket verzio mukodik, en az 1-est hasznaltam, de a kedves es mindig okoskodo fejlesztok google-zas kozben talaltak egy doksit mi szerint ez nem helyes csak temp megoldasnak jo, hasznaljam a 2-es verziot.
Lehet igazuk van, de en nem vagom mi a kulonbseg a ketto kozott es melyiket hasznaljam inkabb?

koszi a tippeket elore is.

Hozzászólások

Üdv,
hogy telepul az "mqm"? Gondolom nem csomagkezelovel, mivel a /opt-ban van... Igazabol telepiteskor kene a libnek gondoskodnia arrol, hogy elerheto legyen, akar ugy, hogy default helyre telepiti magat, akar ugy, hogy ldconfigot hiv a telepitesi path-al. Imho a te esetedben az ldconfig a szebb megoldas, de az idealis helyzet az lenne, ha az mqm rendesen, csomagbol lenne telepitve.

LD_LIBRARY_PATH-ot szoktam használni, ha valami külön fordított dolgot nem standard helyre teszek.
Azért preferálom ezt a megoldást, mert nem szeretném, ha a linker "keresgélne", az adott library-k között, amikor nem az adott alkalmazást használom.

♲♻♲

Na igen csak az ld.so.conf használatával meg az a baj, hogy ha mondjuk két alkalmazásnak is kell két külön verzió egy adott lib-ből, akkor rohadtul nem fog menni az egyik amiatt, hogy mondjuk a sorrendben elsőt veszi, ami nem az igazi.

Lehet anyázni az LD_LIBRARY_PATH-ot, de csomószor nagyon nagy segítség, amikor a nagy cégeknek fogalmuk sincs, hogy kellene egy szoftvert összerakni a Linux-ra. :)

Nos, koszi az elozoget, vegulis az ldconfigot hasznaltam.

Viszont amit nem ertek, idorol idore ujra kell "ldconfigolni". Ugye ahogy irtam, konkretan az IBM MQ kliens lib-jeit kell a python-nak ismernie. ldconfig nelkul a kovetkezot kapom:

Python 2.7.3 (default, Jul 19 2012, 10:58:55)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-52)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pymqi
Traceback (most recent call last):
File "", line 1, in
File "/apps/Python-2.7.3/lib/python2.7/site-packages/pymqi.py", line 104, in
import pymqe, CMQC, CMQCFC, CMQXC
ImportError: libmqic_r.so: cannot open shared object file: No such file or directory

Az MQ kliens telepiteskor auto symlinkeli ezt a libmqic_r.so file-t az /usr/lib-be.

De ahoz hogy a python is lassa, a kovetkezo parancsot kell kiadni:

ldconfig /opt/mqm/lib vagy ldconfig /usr/lib

Ez igy meg mindig rendben van, es rendes megoldasnak is tunik nekem, viszont rendszeresen ELFELEJTI ezt es idonkent (par hetenkent) ujra kell ldconfigolnom. Ez hogy lehet? Vmi otlet?

koszi