Packaging

慣用的 Unix 程序如何檢測它們安裝在什麼前綴下?

  • April 12, 2011

如果我安裝了一個帶有非標準前綴的二進製文件,例如/opt/bin/foo,它需要一些來自 的靜態文件/opt/share/foo,它如何找到它們?使用相對於執行檔 ( ../share/foo) 的反向引用?在編譯時硬編碼?

應用程序處理可變安裝前綴的*慣用方式是什麼?*所有目錄都應該加前綴嗎?(怎麼樣/var?)

在編譯時對此類引用進行硬編碼是很常見的,並且可能提供命令行選項或環境變數來覆蓋編譯時預設值。通常程序只記住一個配置文件的位置(通常在 下/etc),可以覆蓋任何編譯時預設值。這種方法對於由製作作業系統的同一個人編譯的開源軟體最有意義,作為 Linux 發行版或 BSD 埠的一部分。

對於以二進制形式分發的應用程序,通常的方法是從第零個參數定位應用程序二進製文件。按照慣例,execve(ie argv[0]) 的第零個參數是二進製文件的路徑(這取決於呼叫者,通常是外殼程序,以遵守約定)。如果argv[0]不包含任何/,應用程序應該對其執行$PATH查找。

引用自:https://unix.stackexchange.com/questions/6085