I principi di base sono condivisi dalla maggior parte delle distribuzioni Linux / Unix e MinGW.
Perché compilare da sorgente
I pacchetti binari sono solitamente forniti da confezionatori di terze parti per molte piattaforme, ma in alcuni casi non sono un'opzione per diversi motivi:
- I pacchetti binari sono obsoleti o contengono bug critici o mancano le funzionalità richieste che sono disponibili nella versione successiva del software.
- È necessario personalizzare la build, ad esempio per supportare un particolare layout di installazione, per ottenere ottimizzazioni specifiche della piattaforma o per collegarsi a particolari librerie che non sono supportate nel pacchetto binario.
- Vuoi personalizzare il software modificando il codice sorgente.
In tutti questi casi la costruzione di un pacchetto da fonte sembra la soluzione migliore.
Panoramica
La maggior parte dell'installazione dei pacchetti di origine presuppone i seguenti passaggi:
- configurazione (con uno script di configurazione)
- compilazione (con
make) - installazione (con
make install)
La configurazione consentirà la creazione dei file necessari necessari dal seguente passaggio di compilazione e viene eseguita attraverso uno script di configurazione solitamente fornito dal pacchetto sorgente. Durante la configurazione è possibile definire il prefisso di installazione e i componenti abilitati.
La compilazione di solito consiste nell'esecuzione di make dopo il completamento del passaggio di configurazione. In questa fase vengono generate le librerie e i binari richiesti.
L'installazione installerà binari e librerie nel percorso specificato durante il passaggio di configurazione. Si noti che questo passaggio non è realmente richiesto poiché è possibile utilizzare i binari compilati nel percorso di compilazione.
Per una compilazione e un'installazione di vaniglia di solito si eseguono i seguenti comandi:
./configura fare fare installazione
Questo compilerà i file di progetto nella directory di origine e installerà le librerie in /usr/local. . Il terzo passo potrebbe richiedere diritti di super-utente (quindi potrebbe essere necessario sostituirlo con sudo make install), da allora /usr/localnon può essere modificata dagli utenti abituali.
Installare il percorso
Un pacchetto è costituito da diversi file correlati che sono installati in diverse directory. Il passaggio di configurazione di solito consente all'utente di specificare il cosiddetto prefisso di installazione e di solito viene specificato tramite l'opzione di configurazione configure --prefix=PREFIX, dove PREFIX di solito è per impostazione predefinita /usr/local. . Il prefisso specifica la directory comune in cui sono installati tutti i componenti.
Le seguenti directory sono solitamente coinvolte nell'installazione:
PREFIX/bin: contiene i binari generati (es.ffmpeg,ffplay,ffprobeecc. nel caso di FFmpeg)PREFIX/include: contiene le intestazioni della biblioteca (ad es.libavutil/avstring.h,libavcodec/avcodec.h,libavformat/avformat.hecc. in caso di FFmpeg) richiesto per compilare applicazioni collegate contro le librerie di pacchettiPREFIX/lib: contiene le librerie generate (ad es.libavutil,libavcodec,libavformatecc. nel caso di FFmpeg)PREFIX/share: contiene vari componenti indipendenti dal sistema; in particolare file di documentazione ed esempi
Specificando il prefisso è possibile definire il layout di installazione.
Utilizzando un prefisso condiviso come /usr/local/, diversi pacchetti saranno installati nella stessa directory, quindi in generale sarà più difficile ripristinare l'installazione.
Usare un prefisso come /opt/PROJECT/, il progetto verrà installato in una directory dedicata, e per rimuovere dal sistema è possibile rimuovere semplicemente il /opt/PREFIXpercorso. D'altra parte, tale installazione richiederà di modificare tutte le variabili di ambiente per puntare al percorso personalizzato.
Variabili ambientali
Diverse variabili definite nell'ambiente influenzano l'installazione del pacchetto. In particolare, a seconda del prefisso di installazione, potrebbe essere necessario aggiornare alcune di queste variabili per assicurarsi che i componenti installati possano essere trovati dagli strumenti di sistema.
L'elenco delle variabili d'ambiente può essere mostrato tramite il comando env. .
Segue un elenco delle variabili interessate:
PATH: definisce l’elenco di:-percorsi separati dove il sistema cerca binari. Per esempio, se installi il tuo pacchetto in/usr/local/, è necessario aggiornare il PATH in modo che contenga/usr/local/bin. . Questo può essere fatto per esempio attraverso il comandoexport PATH=/usr/local/bin:$PATH. .LD_LIBRARY_PATH: contiene il:-percorsi separati dove il sistema cerca le biblioteche. Per esempio, se installi il tuo pacchetto in/usr/local/, è necessario aggiornare il LD_LIBRARY_PATH in modo che contenga/usr/local/lib. . Questo può essere fatto per esempio attraverso il comandoexport LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH. . Questa variabile è talvolta deprecata a favore dell'uso dildconfig. .CFLAGS: contiene flag utilizzati dal compilatore C, e di solito include direttive di preelaborazione come-IPREFIX/includeo bandiere di compilazione. I CFLAG personalizzati sono solitamente prefissati sui flag del compilatore del pacchetto di origine dal sistema di compilazione del pacchetto di origine. In alternativa, molti sistemi di compilazione consentono di specificare l'opzione di configurazione-extra-cflags. .LDFLAGS: si tratta di direttive utilizzate dal linker, e di solito includono direttive di collegamento come-LPREFIX/libnecessario trovare librerie installate in percorsi personalizzati. I LDFLAGS personalizzati sono solitamente prefissati ai flag del pacchetto di origine dal sistema di compilazione del pacchetto sorgente. In alternativa, molti sistemi di compilazione consentono di specificare l'opzione di configurazione-extra-ldflags. .PKG_CONFIG_PATH: contiene il:-percorsi separati utilizzati dapkg-configper rilevare i file di configurazione pkg utilizzati da molti sistemi di compilazione per rilevare i CFLAG / LDFLAGS personalizzati utilizzati da una libreria specifica.
Nel caso in cui si installasse un pacchetto in un percorso non standard, è necessario aggiornare queste librerie di ambienti in modo che gli strumenti di sistema saranno in grado di rilevare i componenti del pacchetto. Ciò è particolarmente richiesto quando si esegue uno script di configurazione per un pacchetto basato su altre librerie / intestazioni / strumenti installati.
Le variabili di ambiente sono solitamente definite nel file del profilo, ad esempio .profiledefinito nella directory utente per gli utenti sh/bash, e in /etc/profile. . Questo file può essere modificato per impostare in modo permanente l'ambiente personalizzato. In alternativa, le variabili possono essere impostate in uno script o in una particolare sessione di shell.
Ricordati di esportare le variabili nel processo del bambino, ad esempio utilizzando il exportcomando. Leggi la documentazione fine della tua shell per informazioni più dettagliate.
LD_LIBRARY_PATHe ldconfig
Quando si collega una libreria a seconda di altre librerie gli strumenti cercheranno le librerie per collegarsi in un elenco di percorsi standard (in genere /usr/lib) e in altri percorsi che sono impostati nel sistema. Alcuni sistemi si basano sulla LD_LIBRARY_PATHbiblioteca. In alternativa, puoi impostare il percorso globale attraverso la ldconfigutilità, che viene fatto modificando il /etc/ld.so.conffile di configurazione del sistema.
Si noti che su alcuni sistemi il LD_LIBRARY_PATHvariabile definita nel profilo della shell viene ripristinata per motivi di sicurezza (ad es. vedere https://bugs.launchpad.net/ubuntu/+source/xorg/+bug/366728), quindi potrebbe essere necessario reimpostarlo per sessione o per-script.
Prerequisiti di configurazione e pacchetti di distribuzione
Quando si configura un pacchetto, potrebbe essere richiesto di verificare la presenza di alcune librerie e intestazioni richieste. Molti distributivi forniranno pacchetti binari per le librerie richieste, quindi puoi fare affidamento su questi pacchetti piuttosto che compilare e installare da zero.
In generale, per una libreria avrai bisogno del pacchetto libreria e del pacchetto di sviluppo associato a quella libreria. Il pacchetto della libreria contiene solo la libreria, il pacchetto di sviluppo conterrà anche le intestazioni e gli altri file necessari per la compilazione di un pacchetto a seconda di tali librerie. Sui sistemi di distribuzione basati su Debian, i pacchetti di sviluppo hanno il suffisso -dev, sui sistemi di distribuzione basati su RedHat, hanno il suffisso -devel. Alcune distribuzioni, come Arch Linux, non separano i loro pacchetti e il pacchetto standard conterrà anche i file di sviluppo necessari.
Ad esempio su Debian, se si desidera configurare FFmpeg con --enable-libmp3lame, sarà necessario installare il pacchetto di sviluppo libmp3lame denominato libmp3lame-dev. .
È inoltre necessario assicurarsi che la versione della libreria fornita dalla distribuzione sia compatibile con quella richiesta dal pacchetto sorgente configurato. Se il pacchetto richiesto è più recente della versione della libreria fornita dalla distribuzione, potrebbe essere necessario installare da sorgente.
Nessun commento:
Posta un commento
Non inserire link cliccabili altrimenti il commento verrà eliminato. Metti la spunta a Inviami notifiche per essere avvertito via email di nuovi commenti.