Come si collega a una versione specifica di una libreria condivisa in GCC
Domanda
Sto compilando del codice che usa libcurl su un sistema Debian Linux. La mia macchina di sviluppo esegue Debian 5 ma voglio che il binario sia utilizzabile anche sui sistemi Debian 4 precedenti.
Trovo che se specifico -lcurl si collegherà a libcurl.so.4 ma i sistemi Debian 4 hanno solo libcurl.so.3
Esiste un modo in cui posso dire a GCC di collegarsi a libcurl.so.3 (che esiste sia in Debian 4 e 5) o solo a libcurl.so in modo da usare qualunque versione sia disponibile?
Soluzione
Puoi passare il file .so effettivo invece di -l sulla riga di comando del linker e dovrebbe fare quello che vuoi.
Altri suggerimenti
Invece di usare " -lcurl " usa " -l: libcurl.so.3 " E ovviamente usa anche " -L _installed_path_ "
Che ne dici di creare un link simbolico locale al tuo progetto che si colleghi a .3, quindi puoi semplicemente usare -L al momento della compilazione. Non sono sicuro che avresti un conflitto di nomi, ma potresti sempre chiamarlo libcurl-old.so per ogni evenienza.
Penso che il modo corretto per farlo sarà quello di usare le bandiere --filter
e --auxiliare
del linker.
Non sono molto documentati, ma dovrebbero consentire di caricare simboli da diverse versioni della stessa libreria in base alla macchina su cui si è installati.