Si j'installe un binaire avec un préfixe non standard, par ex. /opt/bin/foo
, qui nécessite des fichiers statiques de /opt/share/foo
, comment les trouve-t-il ? Utilisation de références arrière relatives à l'exécutable (../share/foo
) ? Codé en dur au moment de la compilation ?
Quel est l'idiome moyen pour une application de gérer le préfixe d'installation variable ? Tous les répertoires doivent-ils être préfixés ? (qu'en est-il de /var
?)
Réponse acceptée :
Il est courant de coder en dur de telles références au moment de la compilation, et peut-être de fournir une option de ligne de commande ou une variable d'environnement pour remplacer la valeur par défaut au moment de la compilation. Souvent, le programme se souvient juste de l'emplacement d'un fichier de configuration (généralement sous /etc
) où toutes les valeurs par défaut au moment de la compilation peuvent être remplacées. Cette approche est plus logique pour les logiciels open source qui sont compilés par les mêmes personnes qui créent le système d'exploitation, dans le cadre d'une distribution Linux ou de ports BSD.
Pour les applications distribuées sous forme binaire, l'approche habituelle consiste à localiser le binaire de l'application à partir de son argument zéro. Par convention, le zéroième argument de execve
(c'est-à-dire argv[0]
) est le chemin vers le binaire (c'est à l'appelant, souvent un shell, de respecter la convention). Si argv[0]
ne contient aucun /
, l'application doit exécuter $PATH
recherchez-le.