2011-09-26 53 views
55

我需要一個地方來安裝庫在Linux中我沒有su訪問。我正在使用〜/ local [/ bin,/ lib,/ include],但我不知道如何告訴./configure在那裏尋找庫(特別是,我試圖編譯emacs,它需要libgif ,這不會在我的發行版中)。如何添加include和lib路徑來配置/製作循環?

我嘗試添加

export PATH=$PATH:~/local/bin 
export LD_LIBRARY_PATH=~/local/lib 
export C_INCLUDE_PATH=~/local/include 
export CPLUS_INCLUDE_PATH=~/local/include 

到.bashrc中,但它似乎並沒有工作。

+2

請注意,除PATH外,您會覆蓋系統默認值。如果你做了'export C_INCLUDE_PATH =〜/ local/include:$ C_INCLUDE_PATH',你的編譯器將首先在'〜/ local/include'中搜索,而在$ C_INCLUDE_PATH中只有在第一個目錄中沒有找到include時。 –

回答

73

您想要一個config.site文件。嘗試:

 
$ mkdir -p ~/local/share 
$ cat <<EOF> ~/local/share/config.site 
CPPFLAGS=-I$HOME/local/include 
LDFLAGS=-L$HOME/local/lib 
... 
EOF 

當你調用一個autoconf生成的配置與--prefix = $ HOME /地方,在config.site將被讀取,所有的分配都會爲您製作的腳本。 CPPFLAGS和LDFLAGS應該是你所需要的,但你也可以做任何其他期望的任務(因此在上面的示例中)。請注意,-I標誌屬於CPPFLAGS而不屬於CFLAGS,因爲-I僅用於預處理器而不用於編譯器。

+0

William;非常感謝,對於在共享主機上構建CPPFLAGS的建議感到非常興奮。由於您的筆記,今天運行失敗的./configure節省了很多時間。 –

25

設置LDFLAGS和CFLAGS當你運行make:

$ LDFLAGS="-L/home/me/local/lib" CFLAGS="-I/home/me/local/include" make 

如果你不想做一個極大的時間,在你的.bashrc(或你的shell等效)導出這些。還要將LD_LIBRARY_PATH設置爲包括/ home/me/local/lib:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/me/local/lib 
+0

當我將LDFLAGS和CFLAGS添加到.bashrc ./configure失敗時發生configure:error:C編譯器無法創建可執行文件... – Lacrymology

+0

它們可能覆蓋配置測試代碼編譯器參數。只需使用make env預取。 也請嘗試並查看configure是否已經沒有重寫libgif的選項。如果autotools腳本已正確創建,它將允許您指定libgif的安裝路徑(例如,覆蓋默認庫位置)。這將是更清潔的解決方案。 – long404

+0

相同的區別.. tneme @ ws16lab07:〜/ Descargas/emacs-23.3 $ LDFLAGS =「 - L/home/tneme/local/lib」CFLAGS =「 - l/home/tneme/local/include」./configure - -prefix =「/ home/tneme/local」 檢查構建系統類型... i686-pc-linux-gnu 檢查主機系統類型... i686-pc-linux-gnu 檢查gcc ... gcc 檢查C編譯器是否工作... no configure:error:in'/home/tneme/Descargas/emacs-23.3': configure:error:C編譯器無法創建可執行文件 請參閱'config.log'以獲取更多詳細信息 t – Lacrymology

8

這花了一段時間纔得到正確的。在Ubuntu中針對ARM目標進行交叉編譯時遇到此問題。我解決了它:

PATH=$PATH:/ccpath/bin CC=ccname-gcc AR=ccname-ar LD=ccname-ld CPPFLAGS="-nostdinc -I/ccrootfs/usr/include ..." LDFLAGS=-L/ccrootfs/usr/lib ./autogen.sh --build=`config.guess` --host=armv5tejl-unknown-linux-gnueabihf 

通知CFLAGS不與autogen.sh/configure使用,用它給我的錯誤:「配置:錯誤:C編譯器不能創建可執行文件」。在構建環境中,我提供了一個autogen.sh腳本,如果您沒有autogen.sh腳本,請使用上面的命令中的./configure替換./autogen.sh。我在目標系統上運行config.guess以獲取--host參數。

成功運行autogen.sh/configure後,編譯:

PATH=$PATH:/ccpath/bin CC=ccname-gcc AR=ccname-ar LD=ccname-ld CPPFLAGS="-nostdinc -I/ccrootfs/usr/include ..." LDFLAGS=-L/ccrootfs/usr/lib CFLAGS="-march=... -mcpu=... etc." make 

我選擇使用的CFLAGS是:「-march =的ARMv5TE -fno-樹矢量化-mthumb-交織-mcpu = ARM926EJ -s」。要使所有include目錄正確設置需要一段時間:您可能希望某些包含指向您的交叉編譯器,並且有些包含指向您的根文件系統,並且可能會有一些衝突。

我相信這不是一個完美的答案。而且我仍然看到一些include目錄指向Makefiles中的/和not/ccrootfs。想知道如何改正這一點。希望這可以幫助某人。

相關問題