2012-04-20 24 views
2

這聽起來像一個谷歌第一諮詢--help有點問題,但我做了兩個,仍然不力真正得到satisfing答案。什麼是交叉的確切目的編譯選項「--prefix」

想象一下下面的場景:我在我的i686硬盤上有一個交叉編譯的RootFileSystem,在/tftpboot/rfs下。我用我的AR​​M平臺通過NFS引導此RFS。我現在想編譯libxml,sqlitephpARM-RFS來擴展已經安裝的thttpd服務器。在我的理解,--prefix定義了不同的地方/,所以在我的情況我CONFIGS應該如下:

//libxml 

./configure --build=i686-linux --host=arm-926ejs-linux-gnueabi --prefix=/tftpboot/rfs 
make 
make install 


//sqlite 
./configure --build=i686-linux --host=arm-926ejs-linux-gnueabi --prefix=/tftpboot/rfs CFLAGS="-lpthread -lrt -Os -ldl" CPPFLAGS="-DSQLITe_THREADSAFE=1 -DSQLITE_TEMP_STORAGE=3" 
make 
make install 

//php 
./configure --build=i686-linux --host=arm-926ejs-linux-gnueabi --target=arm-926ejs-linux-gnueabi --prefix=/tftpboot/rfs 
    --with-thttpd=/usr/local/sbin --without-pear --with-pdo-sqlite=/usr/local --disable-all --enable-pdo 
    --with-sqlite3=/usr/local --with-config-file-path=/data --enable-libxml --with-libxml-dir=/usr/local 
make 
make install 

因爲:

  • 我想在正常rootfs層次,但在安裝根點在/tftpboot/rfs
  • thttpd已經安裝在/tftpboot/rfs。所以我想鏈接它
  • ???

所以我不得不承認,我絕對不知道我必須採取絕對和我必須在相對路徑工作。或者我是否完全錯誤?

回答

1

--prefix告訴配置安裝程序的位置以及安裝的程序在運行時應該查找其文件的位置。

如果一個特定的項目/程序在運行時沒有使用前綴(許多不這樣做),那麼它只是安裝位置,您可以忽略以下內容。您通常可以通過對目錄名稱的已安裝二進制文件執行grep命令(嘗試在獨特的前綴中進行實驗性安裝)來確定編譯後的程序是否使用了前綴,但如果文件具有調試信息則可能不起作用。

否則,如果你想從你編譯它,然後在這裏一個不同的位置運行它的絕招:

假設:

  • 要從/usr/bin在目標系統的視圖運行它。
  • 您想要在構建系統的視圖中將其安裝在/tftpboot/rfs/usr/bin下。

步驟:

./configure --prefix=/usr --build=i686-linux --host=arm-926ejs-linux-gnueabi 
make 
make DESTDIR=/tftpboot/rfs install 

警告DESTDIR是傳統的名字,但有些項目可能會選擇其他的東西(或什麼都沒有,在這種情況下生成文件快樂黑客)。