Il titolo dice tutto, in realtà. Ma permettetemi di specificare la domanda:
Supponendo che dovessi compilare un'applicazione che utilizza libffi, libGL, dlfcn e SDL, il binario potrebbe essere eseguito su altre distribuzioni Linux con la stessa architettura, ecc?
Il motivo per cui lo chiedo è a causa della directory /usr/lib/i386-linux-gnu
– Potrei sbagliarmi, ma presumo che questa directory sia qualcosa di piuttosto specifico di Ubuntu, no?
Quindi, quanto sono davvero portabili i binari compilati su Ubuntu?
Risposta accettata:
Quando compili un file binario, diciamo nginx
dal codice sorgente, è costruito con informazioni su quali versioni delle librerie sono presenti sul sistema che sta compilando i binari. Le librerie a cui fare riferimento ovviamente sono determinate dagli argomenti (per nginx
, questa è la definizione di quali moduli si desidera attivare o meno). Ma quel binario che hai creato (improbabile) verrà eseguito su un sistema separato, a meno che non sia un sistema con configurazione identica.
Dovrai compilare l'applicazione su ogni singolo sistema, è (relativamente) improbabile che sarai in grado di trasferire la versione compilata su un altro sistema che potrebbe non avere una versione compatibile di ogni libreria.
Nota:mentre puoi ottenere un binario da trasferire su un altro sistema Linux, è sconsiderato e di solito richiede tempo. Questo perché:
(1) Devi assicurarti che il sistema in cui sposterai il tuo binario utilizzi la stessa versione di libc
che è stato utilizzato per compilare i binari
(2) È necessario assicurarsi che le librerie utilizzate all'interno del programma possano essere rilevate facilmente sul sistema e che siano le stesse (o compatibili) versioni utilizzate per creare il programma.
...e ovviamente altre variabili da considerare. A lungo termine è solo più facile compilare il programma su ogni sistema per usarlo piuttosto che cercare di ottenere la portabilità.