Supponiamo che io sono:GCC collegamento a nome del linker di un oggetto condiviso
/usr/lib/libsomething.so.1
sulla macchina A;/usr/lib/libsomething.so.2
sulla macchina B.
Entrambe le macchine hanno /usr/lib/libsomething.so
link simbolici ai rispettivi librerie.
Se collegamento mediante gcc
con -lsomething
(o anche /usr/lib/libsomething.so
) seguirà il link simbolico, e ldd
sulla macchina A produce qualcosa come:
libsomething.so.1 => /usr/lib/libsomething.so.1
Ciò significa che non sarà in grado di trovare la libreria sulla macchina B.
Ora so che si tratta di modifiche importanti al numero di versione e so che potrebbero non essere compatibili, ma sono disposto a correre questo rischio. Quello che mi piacerebbe dire al linker è quello di cercare libsomething.so
, e non seguono il link simbolico in modo ldd
mostrerà
libsomething.so => /usr/lib/libsomething.so.1
su A ma
libsomething.so => /usr/lib/libsomething.so.2
su B. E poi il caricatore seguirà il link simbolico a qualunque versione ci sia.
Inoltre, non desidero un caricamento ritardato con dlopen o altro. Voglio che si colleghi all'oggetto condiviso al momento della compilazione.
È possibile?
Non stavo costruendo la biblioteca in questione, penso che la vera risposta è solo non fare quello che ho suggerito, e se vuoi veramente imbrogliare, usa solo i link simbolici. Ciò ha fornito alcune buone informazioni anche se così sto accettando. –