Si instalo un binario con un prefijo no estándar, p. /opt/bin/foo
, que necesita algunos archivos estáticos de /opt/share/foo
, ¿cómo los encuentra? Usando referencias anteriores relativas al ejecutable (../share/foo
)? ¿Codificado en tiempo de compilación?
¿Cuál es el idiomático manera para que una aplicación maneje el prefijo de instalación variable? ¿Todos los directorios deben tener un prefijo? (¿Qué pasa con /var
?)
Respuesta aceptada:
Es común codificar dichas referencias en el momento de la compilación, y tal vez proporcionar una opción de línea de comandos o una variable de entorno para anular el valor predeterminado en el momento de la compilación. A menudo, el programa solo recuerda la ubicación de un archivo de configuración (normalmente en /etc
) donde se pueden anular los valores predeterminados en tiempo de compilación. Este enfoque tiene más sentido para el software de código abierto compilado por las mismas personas que crean el sistema operativo, como parte de una distribución de Linux o puertos BSD.
Para las aplicaciones distribuidas en forma binaria, el enfoque habitual es ubicar el binario de la aplicación desde su argumento cero. Por convención, el argumento cero de execve
(es decir, argv[0]
) es la ruta al binario (depende de la persona que llama, a menudo un shell, respetar la convención). Si argv[0]
no contiene ningún /
, la aplicación debería ejecutar $PATH
búscalo.