6

說我創造了一些腳本,也許一個守護進程,甚至一個輔助二進制應用程序包......當編譯這樣的二進制..是可行的,只有相對 ./configure/make它路徑?例如,更加自覺的Makefile將包括條款,如...使用相對路徑名進行交叉編譯 - 二進制可移植性/可嵌入性? (GCC)

--bindir=DIR   user executables [EPREFIX/bin] 
--sbindir=DIR   system admin executables [EPREFIX/sbin] 
--libexecdir=DIR  program executables [EPREFIX/libexec] 
--sysconfdir=DIR  read-only single-machine data [PREFIX/etc] 
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] 
--localstatedir=DIR modifiable single-machine data [PREFIX/var] 
--libdir=DIR   object code libraries [EPREFIX/lib] 
--includedir=DIR  C header files [PREFIX/include] 
--oldincludedir=DIR C header files for non-gcc [/usr/include] 
--datarootdir=DIR  read-only arch.-independent data root [PREFIX/share] 
--datadir=DIR   read-only architecture-independent data [DATAROOTDIR] 
--infodir=DIR   info documentation [DATAROOTDIR/info] 
--localedir=DIR  locale-dependent data [DATAROOTDIR/locale] 
--mandir=DIR   man documentation [DATAROOTDIR/man] 
--docdir=DIR   documentation root [DATAROOTDIR/doc/hiawatha] 
--htmldir=DIR   html documentation [DOCDIR] 
--dvidir=DIR   dvi documentation [DOCDIR] 
--pdfdir=DIR   pdf documentation [DOCDIR] 
--psdir=DIR   ps documentation [DOCDIR] 

這是偉大的,你可以安裝一切/opt/local,而不是/usr/local。甚至發瘋,並通過sed重命名的二進制文件..我得到它..

但是仍然在我的小大腦不清楚,是如果有能力以這樣的方式任意設定的路徑延伸到地圖的能力相對於可執行的目錄,在類似的方式...

--prefix=PREFIX install architecture-independent files in PREFIX [/usr/local] 
--prefix=./  aka [../relative/to/binary]  

因此,舉例來說,不管你來自哪裏,推出了bin,它總是知道它是.conf文件將是向上一個文件夾,在那個相對../etc文件夾,或者甚至可能就在旁邊,在同一目錄,./。同樣,你可以保證寫訪問日誌和PID文件等,而不會懷疑你的目標的權限/目錄結構...

這將啓用一個完全可移植的/bin /etc /lib /var目錄結構,在一個PATH我可以保證一些可預測性的表象......但我不認爲它就像那樣「有效」。而且我不確定是簡單地「靜態鏈接」還是其他方式?真正創建一個能夠被移動到另一個系統(雖然,對於這種情況,對那些在同一個地方,同樣的支持庫,以免糊里糊塗問題)二進制文件是否有可能在這個交叉編譯方式?你可以在同一個構建週期內構建多個體繫結構嗎? (例如i386和x86_64在同一時間)

也許我可以只使用一個良好的GNU/GCC引物(CC,CFLAGS,LDFLAGS,-I,-I和CPP 101等)的建議,但是那不是爲數學老師寫的(在70年代)?

回答

0

在全一般性,不,這是行不通的。例如,/ etc中有些內容可能會被整個系統共享,並且如果您試圖爲一個應用保留私有副本,將無法正常工作。

雖這麼說,你的應用程序很可能不使用該系統上的每一個共享資源。無論是使用本地/ bin和/ sbin,或者從應用程序目錄中的相對路徑實際使用symlinking,都應該沒問題。/var似乎不太可能作爲你的應用程序需要直接瞭解的東西 - 任何阻止你存儲日誌的方式,或使用syslogd?