編譯make報(bào)錯怎么辦
編譯make報(bào)錯怎么辦
Linux下從源代碼下編譯安裝一個軟件有時候會報(bào)錯,遇到一些麻煩。那么編譯make報(bào)錯怎么辦呢?下面跟著學(xué)習(xí)啦小編一起來了解一下吧。
編譯make報(bào)錯怎么辦
在Ubuntu下安裝nox,make出錯如下:
》》》》 collect2: ld returned 1 exit status
》》》》 make[3]: *** [nox_core] Error 1
》》》》 make[3]: Leaving directory `/usr/nox/build/src‘
》》》》 make[2]: *** [all-recursive] Error 1
》》》》 make[2]: Leaving directory `/usr/nox/build/src’
》》》》 make[1]: *** [all-recursive] Error 1
》》》》 make[1]: Leaving directory `/usr/nox/nox13oflib/build‘
》》》》 make: *** [all] Error 2經(jīng)過查資料,在參考文獻(xiàn)【1】發(fā)現(xiàn)是因?yàn)閚ox只能在boost1.50以上的版本才能編譯成功,而Ubuntu12.10版本的boost版本為1.42。所以要更新boost,采取的方法是到boost官網(wǎng)下載源碼并且編譯。
下面列出簡要的安裝過程
安裝虛擬機(jī):OpenFlow1.3_BiangHoo
IP:10.10.134.124
OS: ubuntu 12.10LTS
nox安裝:
安裝相關(guān)依賴包:
sudo apt-get install autoconf automake g++ libtool swig make git-core libboost-dev libboost-test-dev libboost-filesystem-dev libssl-dev libpcap-dev python-twisted python-simplejson python-dev
還要安裝libboost-all-dev 和libttb-dev
apt-get install libboost-all-dev libttb-dev
然后到到boost官網(wǎng)下載源碼并且編譯。我下載的是1.55版本。然后將boost安裝到/usr/local/目錄下
即
。/bootstrap.sh --prefix=/usr/local/boost
然后
。/b2 install
接著運(yùn)行l(wèi)dconfig使相關(guān)的庫生效
然后下載nox源碼
git clone git://github.com/noxrepo/nox
cd nox
。/boot.sh
mkdir build
cd build
。。/。/configure --with-boost=/usr/local/boost #boost的安裝位置
make
make install
即可安裝成功
啟動nox
cd PATH_TO_NOX/nox/build/src
。/nox_core -i ptcp:6633
注意:編譯安裝一個軟件不會被系統(tǒng)的包管理系統(tǒng)記錄信息,這對于卸載和記錄軟件的行為都是不利的,建議您盡量使用打包好的包(.rpm .deb)
下面說說編譯出現(xiàn)錯誤的另一種方法:
./configure 錯誤
以下根據(jù)錯誤出現(xiàn)頻率一一道來。第一個是經(jīng)常性出現(xiàn)錯誤(是選擇性的)。()中表示可選,OR表示有一致的解決辦法,<>表示內(nèi)的文字由具體情況具體表示
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版本沒有安裝。請使用你發(fā)行版的包管理器(或者其他尋找和安裝包的方法)來尋找<somename>包并且安裝,如果可能的話安裝-dev 或者-devel版本
如果-dev 或者-devel版本已經(jīng)安裝了,或者不存在,查看一下已經(jīng)安裝的版本號。它足夠高嗎?是不是比<someversion>要低,這樣你要常 識升級這些包。如果還不行的話,你可以嘗試編譯你要編譯軟件的以前的版本。老版本通常使用老版本的庫/程序
如果./configure 提示找不到的是一個庫(通常提示lib<something>),并且你確定了已經(jīng)安裝了正確版本的庫,現(xiàn)在嘗試找到你的庫文件的位置。如果 庫文件路徑不包括在你的ld.conf 文件(通常是/etc/ld.conf或者是/etc/ld.so.conf)你應(yīng)該在此文件中添加,然后運(yùn)行l(wèi)dconfig命令(/sbin /ldconfig)需要注意的是:運(yùn)行l(wèi)dconfig 通常需要root權(quán)限。如果您不知道怎么辦,待回看一下下Make install錯誤的第一點(diǎn)
記:如果您沒有修改ld.conf文件的權(quán)限,您還可以將庫文件路徑添加到LD_LIBRARY_PATH變量中。當(dāng)然這是個笨方法,也不是最好的方法,但是當(dāng)你沒有其他選擇時,你只好這么做了:
export LD_LIBRARY_PATH=”$LD_LIBRARY_PATH:/your/library/directory”
當(dāng)然,將您的庫文件路徑。注意當(dāng)您運(yùn)行編譯好的軟件時,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 看它屬于那個包,然后嘗試用您系統(tǒng)的包管理器這安裝這個包(如果可能的話,同時安裝它的-dev或者-devel版本 )
3。 (configure:) (error:) no acceptable cc found in <somedirectories>
您沒有安裝gcc或者cc環(huán)境變量沒有設(shè)置。用包管理器檢查gcc是否已經(jīng)安裝,如果沒有的話,安裝它。如果安裝了嘗試用這個命令
export CC=”/usr/bin/cc”
如果要永久性的話,你可以將這個命令添加的/etc/profile中(當(dāng)任何用戶登陸進(jìn)來時會執(zhí)行這個文件里很多的命令)這樣,您以后就不要再設(shè)置了。
4。(configure:) (error:) C++ preprocessor “/lib/cpp” fails sanity check
您的g++包或者失蹤了或者conrrupted了,請檢查您的包管理器(或者其他尋找和安裝包的方法)去尋找g++和安裝相應(yīng)的包。注意,許多發(fā) 行版并不稱為g++,比如說,F(xiàn)edora,在yum源里用gcc-g++來表示g++包。如果您找不到g++,你可以尋找c++,cpp和/或者gcc
5。(configure:) (error:) C++ preprocessor “CC (-E)” fails sanity check
這個是libtool的一些特定有bug的版本,它使configure腳本檢查libtool支持的編輯器。這個最快的解決辦法就是安裝g++(解決辦法如上)
上面就是Ubuntu安裝Nox后編譯make不通過的方法介紹了,如果你不會安裝Nox,又或者安裝好后無法通過make,那么可嘗試使用本文介紹的方法進(jìn)行解決。