歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux下解決./configure ,make,make install的報錯

Linux下解決./configure ,make,make install的報錯

日期:2017/2/28 16:18:11   编辑:Linux教程

Linux下從源代碼下編譯安裝一個軟件有時候會報錯,遇到一些麻煩。有些情況即使你用了很多方法去嘗試解決,但問題依然存在,那怎麼辦呢?本教程教你怎麼解決Linux軟件編譯時遇到的問題

注意:編譯安裝一個軟件不會被系統的包管理系統記錄信息,這對於卸載和記錄軟件的行為都是不利的,建議您盡量使用打包好的包(.rpm .deb)

我們分3類錯:

./configure 錯誤

make 錯誤

make install 錯誤

識別這些錯誤應該是很簡單的:./configure的錯誤會被configure腳本輸出,make和make install錯誤也應該很明顯被識別。下面分類說明3種錯誤和解決辦法:

一: ./configure 錯誤

以下根據錯誤出現頻率一一道來。第一個是經常性出現錯誤(是選擇性的)。()中表示可選,OR表示有一致的解決辦法,<>表示內的文字由具體情況具體表示

1 。(configure:) (error:) <somename> (<someversion> (or higher)) not found. (Please check your installation!) OR checking for <somename>… (configure:) (error:) not found. OR (configure:) (error:) <somename> (<someversion> (or newer)) is required to build <package-you’re-trying-to-compile>

這表明<somename>的包的-dev或者-devel版本沒有安裝。請使用你發行版的包管理器(或者其他尋找和安裝包的方法)來尋找<somename>包並且安裝,如果可能的話安裝-dev 或者-devel版本

如果-dev 或者-devel版本已經安裝了,或者不存在,查看一下已經安裝的版本號。它足夠高嗎?是不是比<someversion>要低,這樣你要常 識升級這些包。如果還不行的話,你可以嘗試編譯你要編譯軟件的以前的版本。老版本通常使用老版本的庫/程序

如果./configure 提示找不到的是一個庫(通常提示lib<something>),並且你確定了已經安裝了正確版本的庫,現在嘗試找到你的庫文件的位置。如果 庫文件路徑不包括在你的ld.conf 文件(通常是/etc/ld.conf或者是/etc/ld.so.conf)你應該在此文件中添加,然後運行ldconfig命令(/sbin /ldconfig)需要注意的是:運行ldconfig 通常需要root權限。如果您不知道怎麼辦,待回看一下下Make install錯誤的第一點

記:如果您沒有修改ld.conf文件的權限,您還可以將庫文件路徑添加到LD_LIBRARY_PATH變量中。當然這是個笨方法,也不是最好的方法,但是當你沒有其他選擇時,你只好這麼做了:

export LD_LIBRARY_PATH=”$LD_LIBRARY_PATH:/your/library/directory”

當然,將您的庫文件路徑。注意當您運行編譯好的軟件時,LD_LIBRARY_PATH必須包含您的庫文件夾路徑

2。(configure:) (error:) cannot find header (file) <somename>.h OR (configure:) (error:) (header) (file) <somename>.h missing! OR <similar>

configure腳本提示找不到“.h文件。這個錯誤和上面的錯誤是類似的,它也要求您安裝特定包的-dev或者-devel版本。然而,它並不 能清楚顯示你需要安裝哪個包,而<somename>會是一個特別廣泛的包,你可以嘗試在web上搜索<somename>.h 看它屬於那個包,然後嘗試用您系統的包管理器這安裝這個包(如果可能的話,同時安裝它的-dev或者-devel版本 )

3。 (configure:) (error:) no acceptable cc found in <somedirectories>

您沒有安裝gcc或者cc環境變量沒有設置。用包管理器檢查gcc是否已經安裝,如果沒有的話,安裝它。如果安裝了嘗試用這個命令

export CC=”/usr/bin/cc”

如果要永久性的話,你可以將這個命令添加的/etc/profile中(當任何用戶登陸進來時會執行這個文件裡很多的命令)這樣,您以後就不要再設置了。

4。(configure:) (error:) C++ preprocessor “/lib/cpp” fails sanity check

您的g++包或者失蹤了或者conrrupted了,請檢查您的包管理器(或者其他尋找和安裝包的方法)去尋找g++和安裝相應的包。注意,許多發 行版並不稱為g++,比如說,Fedora,在yum源裡用gcc-g++來表示g++包。如果您找不到g++,你可以尋找c++,cpp和/或者gcc

5。(configure:) (error:) C++ preprocessor “CC (-E)” fails sanity check

這個是libtool的一些特定有bug的版本,它使configure腳本檢查libtool支持的編輯器。這個最快的解決辦法就是安裝g++(解決辦法如上)

二: Make 錯誤

make錯誤通常很具體,並不能夠寫一個抽象的總結。我會給你一些可能有所幫助的東西

如果您在使用gcc 4編譯(使用gcc -dumpversion來查看)(我的補充gcc –version也可),可以嘗試用舊版本。首先,請確定包的舊版版已經安裝了。可以這樣做

ls /usr/bin/gcc*

如果返回有這個

/usr/bin/gcc /use/bin/gcc32

這樣的話,你可以用gcc32這個老的版本命令來編譯。如果不行的話,請用您的包管理器來安裝舊版本的gcc(通常是稱之為compat-gcc或 者gcc-<versionbumber>)安裝之後,您會通過上邊的命令上面邊命令檢測到已經安裝的gcc。讓./configure make make install 使用gcc版本的方法如下:

CC=”/usr/bin/gcc32″ ./configure

CC=”/usr/bin/gcc32″ make

CC=”/usr/bin/gcc32″ make install

注意:大多數情況下,您可以不帶/usr/bin ,只輸入gcc即可。然而,一些不標准的Makefikes可能采取不同的方法。因此,寫全路徑是最安全的方法。當然,具體/usr/bin/gcc32要用您具體的路徑代替

有時候make報的錯只是由於一個bug引起的。嘗試獲得最新版的軟件(使用CVS或者SVN或者源,或者下載每日快照)並且常識編譯查看時候他們已經修復了bug。

make報的錯還可能由特定庫/程序的錯誤版本造成的。特別是特別新或者舊的軟件會遇到這個問題。查看以下軟件的依賴(他們通常在軟件的網站上顯示 出來)拿那些包的版本與你系統裡的包的版本對比(他們通常可以用系統的包管理器查看)如果電腦中的包版本比網站要求的版本的高,你可能在編譯一個老版本的 軟件。如果你確實需要編譯他,嘗試降低依賴。然而,尋找其他方法來安裝軟件或者找一個替代品是最好的方法。如果您系統的特定軟件版本比要求的版本低,您可 以或者編譯一個bleeding-edge包,或者您的發行版太舊了,或者都有包括。。。你應該常識更新需要的庫/軟件,或者編譯一個老版本的程序。還 有,查看是否有針對您發行版的包存在著。安裝這樣的包比常識安裝這些錯誤會很麻煩的。

還有就是在網絡中搜索您特定的錯誤,如果您找不到任何有用的東西,可以省略行號(他們根據版本號不一樣),版本號碼(你可以用“*”來代替他們,如 果他們包含在文件內部)非字母的字符比如說引號,他們影響搜索引擎的搜索。你可以在很多mailing列表上找到很多信息。一些情況下,還會有源代碼的補 丁。可以這樣來打補丁

patch -Npl -i <patchfile>

注意當你打補丁時你應該在源代碼路徑中

三: Make install 錯誤

這些錯誤理解起來很容易,但是我還是列一下吧~通常有兩大失敗原因

1.

你沒有root權限。嘗試用sudo make install命令或者使用su命令成為root用戶。

sudo make install

提示輸入密碼時,輸入您自己的密碼或者系統管理員的密碼

su

這樣就可以成為root用戶,提示輸入密碼時,要輸入系統管理員的密碼。這樣成為root之後,只需要運行make install命令即可。然後Ctrl+D或者exit,logout命令來退出。對於sudo來講的話,它只用root權限來運行一次命令,並不會以 root身份登錄的。

2.

您編譯的包沒有安裝目標。這樣,您就需要將編譯好的二進制文件放到bin文件夾中。在源代碼路徑下運行ls命令,可執行文件應該會以亮綠色顯示的。您需要將這些文件拷貝到/usr/bin或者/usr/local/bin 中,至於哪個就是看您愛好了。命令大致如下

cp <executeablefile> /usr/bin

然後,如果使用多次,可能會是您的/usr目錄看起來一團糟。您可以將可執行文件所在的路徑添加到您的PATH路徑中。進入到可執行文件的路徑,執行pwd命令查看全路徑名

然後將pwd命令的輸出放到這個命令中

export PATH=”$PATH:<pwdoutput>”

現在,運行可執行文件,它就開始工作了。將上述命令添加到您的/etc/profile文件中,這樣可永久保存。

我同意這樣做不太好,不夠簡潔和方便。但是有時候開發者沒有時間開創建一個安裝目標。我們不應該對此感到氣氛。。。想想他們為了讓我們使用有用和有趣的程序而做出的努力吧

其他問題:

這是一些其他常見的問題,並附上解決辦法:

1.一切正常,但是當我要運行我剛才安裝的軟件時,bash提示找不到。這通常是由於make install將每個東西都安裝在了/usr/local或者/opt/<packagename>.檢查一下make install 將文件復制到了哪裡。可以將可執行文件的路徑添加到PATH路徑中(下面的例子假設您裝包安裝在了/usr/local)

export PATH=”$PATH:/usr/local/bin”

當然,您可以用相應的路徑來代替/usr/local/bin文件夾。如果希望不用再輸入的的話,將輸入命令添加到您的/etc/profile中,這樣您就不需要重復輸入了另外,你可以在configure的時候,控制包安裝在哪個目錄。。。比如說:

./configure –prefix=/usr

您可以將/usr用您想安裝的目標路徑代替。注意,您只是在設置prefix,二進制文件會安裝雜prefix子目錄下,頭文件也是~當使用了上述的frefix,你可以在/usr/bin找到二進制文件

2.當我想安裝一個老版本的包,我在互聯網上找打不到源代碼包。然而,你還是有個小希望的。嘗試搜索您想尋找的rpm的版本,下載相應的src rpm包。並且解包

rpm系:rpm2cpio <rpmfile>|cpio -idv

這樣,您就可以使用從rpm裡解壓縮出來的源文件

Copyright © Linux教程網 All Rights Reserved