2015-05-21 16 views
5

Il rpath di un file eseguibile specifica una o più directory in cui cercare oggetti condivisi in fase di esecuzione.percorso di un file oggetto condiviso

La mia domanda è - fare file oggetto condiviso hanno anche statico-compilato rpath s?

Recentemente ho ricevuto un errore di runtime durante il collegamento con un oggetto condiviso:

./example: /opt/swt/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by ./mylib.so) 

Questo errore indica a me che la realtà stessa biblioteca - mylib.so, ha un compilato staticamente rpath.

La mia comprensione era che rpath si applicava solo agli eseguibili, non agli oggetti condivisi. Lo rpath si applica anche agli oggetti condivisi? file stessi

risposta

3

oggetto fare condiviso anche avere staticamente compilato rpaths

Essi possono (o non possono) a seconda che sono stati collegati con -Wl,-rpath=... opzione.

Questo errore indica a me che la realtà stessa biblioteca - mylib.so, ha un compilato staticamente rpath.

Il messaggio di errore non non dire che a tutti. Dove hai preso quell'idea?

Se vuoi sapere se mylib.so ha DT_RPATH o no, fare questo:

readelf -d mylib.so | grep 'R.*PATH' # could also have RUNPATH 

La mia comprensione è che rpath applicato solo per gli eseguibili, gli oggetti non condivise. Quindi lo rpath si applica anche agli oggetti condivisi?

La vostra comprensione è corretta, e RPATH (e RUNPATH) lavora per gli oggetti condivisi altrettanto bene.