Wenn ich eine Binärdatei mit einem nicht standardmäßigen Präfix installiere, z. /opt/bin/foo
, die einige statische Dateien aus /opt/share/foo
benötigt , wie findet es sie? Verwenden von Rückverweisen relativ zur ausführbaren Datei (../share/foo
)? Zur Kompilierzeit fest codiert?
Was ist die Idiomatik Möglichkeit für eine Anwendung, mit dem variablen Installationspräfix umzugehen? Sollen alle Verzeichnisse vorangestellt werden? (was ist mit /var
?)
Akzeptierte Antwort:
Es ist üblich, solche Referenzen zur Kompilierzeit fest zu codieren und möglicherweise eine Befehlszeilenoption oder Umgebungsvariable bereitzustellen, um die Standardeinstellung zur Kompilierzeit zu überschreiben. Oft merkt sich das Programm nur den Speicherort einer Konfigurationsdatei (normalerweise unter /etc
), wo alle Standardeinstellungen zur Kompilierzeit überschrieben werden können. Dieser Ansatz ist am sinnvollsten für Open-Source-Software, die von denselben Leuten kompiliert wird, die das Betriebssystem als Teil einer Linux-Distribution oder BSD-Portierungen erstellen.
Bei Anwendungen, die in binärer Form verteilt werden, besteht der übliche Ansatz darin, die Anwendungsbinärdatei anhand ihres nullten Arguments zu lokalisieren. Per Konvention das nullte Argument für execve
(d.h. argv[0]
) ist der Pfad zur Binärdatei (es obliegt dem Aufrufer, oft einer Shell, die Konvention zu respektieren). Wenn argv[0]
enthält keinen /
, sollte die Anwendung $PATH
ausführen nachschlagen.