Se installo un binario con prefisso non standard, ad es. /opt/bin/foo
, che necessita di alcuni file statici da /opt/share/foo
, come li trova? Utilizzo dei riferimenti indietro relativi all'eseguibile (../share/foo
)? Hardcoded in fase di compilazione?
Qual è l'idiomatica modo per un'applicazione di gestire il prefisso di installazione variabile? Tutte le directory devono avere un prefisso? (che dire di /var
?)
Risposta accettata:
È comune codificare tali riferimenti in fase di compilazione e forse fornire un'opzione della riga di comando o una variabile di ambiente per sovrascrivere l'impostazione predefinita in fase di compilazione. Spesso il programma ricorda solo la posizione di un file di configurazione (in genere sotto /etc
) in cui è possibile sovrascrivere qualsiasi impostazione predefinita in fase di compilazione. Questo approccio ha più senso per il software open source compilato dalle stesse persone che realizzano il sistema operativo, come parte di una distribuzione Linux o di porte BSD.
Per le applicazioni distribuite in forma binaria, l'approccio usuale consiste nell'individuare il binario dell'applicazione dal suo argomento zero. Per convenzione, l'argomento zero per execve
(cioè argv[0]
) è il percorso del binario (spetta al chiamante, spesso una shell, rispettare la convenzione). Se argv[0]
non contiene alcun /
, l'applicazione dovrebbe eseguire $PATH
cercalo.