編譯make報(bào)錯(cuò)怎么辦
編譯make報(bào)錯(cuò)怎么辦
Linux下從源代碼下編譯安裝一個(gè)軟件有時(shí)候會(huì)報(bào)錯(cuò),遇到一些麻煩。那么編譯make報(bào)錯(cuò)怎么辦呢?下面跟著學(xué)習(xí)啦小編一起來(lái)了解一下吧。
編譯make報(bào)錯(cuò)怎么辦
在Ubuntu下安裝nox,make出錯(cuò)如下:
》》》》 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)過(guò)查資料,在參考文獻(xiàn)【1】發(fā)現(xiàn)是因?yàn)閚ox只能在boost1.50以上的版本才能編譯成功,而Ubuntu12.10版本的boost版本為1.42。所以要更新boost,采取的方法是到boost官網(wǎng)下載源碼并且編譯。
下面列出簡(jiǎn)要的安裝過(guò)程
安裝虛擬機(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)的庫(kù)生效
然后下載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
即可安裝成功
啟動(dòng)nox
cd PATH_TO_NOX/nox/build/src
。/nox_core -i ptcp:6633
注意:編譯安裝一個(gè)軟件不會(huì)被系統(tǒng)的包管理系統(tǒng)記錄信息,這對(duì)于卸載和記錄軟件的行為都是不利的,建議您盡量使用打包好的包(.rpm .deb)
下面說(shuō)說(shuō)編譯出現(xiàn)錯(cuò)誤的另一種方法:
./configure 錯(cuò)誤
以下根據(jù)錯(cuò)誤出現(xiàn)頻率一一道來(lái)。第一個(gè)是經(jīng)常性出現(xiàn)錯(cuò)誤(是選擇性的)。()中表示可選,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版本沒(méi)有安裝。請(qǐng)使用你發(fā)行版的包管理器(或者其他尋找和安裝包的方法)來(lái)尋找<somename>包并且安裝,如果可能的話安裝-dev 或者-devel版本
如果-dev 或者-devel版本已經(jīng)安裝了,或者不存在,查看一下已經(jīng)安裝的版本號(hào)。它足夠高嗎?是不是比<someversion>要低,這樣你要常 識(shí)升級(jí)這些包。如果還不行的話,你可以嘗試編譯你要編譯軟件的以前的版本。老版本通常使用老版本的庫(kù)/程序
如果./configure 提示找不到的是一個(gè)庫(kù)(通常提示lib<something>),并且你確定了已經(jīng)安裝了正確版本的庫(kù),現(xiàn)在嘗試找到你的庫(kù)文件的位置。如果 庫(kù)文件路徑不包括在你的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錯(cuò)誤的第一點(diǎn)
記:如果您沒(méi)有修改ld.conf文件的權(quán)限,您還可以將庫(kù)文件路徑添加到LD_LIBRARY_PATH變量中。當(dāng)然這是個(gè)笨方法,也不是最好的方法,但是當(dāng)你沒(méi)有其他選擇時(shí),你只好這么做了:
export LD_LIBRARY_PATH=”$LD_LIBRARY_PATH:/your/library/directory”
當(dāng)然,將您的庫(kù)文件路徑。注意當(dāng)您運(yùn)行編譯好的軟件時(shí),LD_LIBRARY_PATH必須包含您的庫(kù)文件夾路徑
2。(configure:) (error:) cannot find header (file) <somename>.h OR (configure:) (error:) (header) (file) <somename>.h missing! OR <similar>
configure腳本提示找不到“.h文件。這個(gè)錯(cuò)誤和上面的錯(cuò)誤是類似的,它也要求您安裝特定包的-dev或者-devel版本。然而,它并不 能清楚顯示你需要安裝哪個(gè)包,而<somename>會(huì)是一個(gè)特別廣泛的包,你可以嘗試在web上搜索<somename>.h 看它屬于那個(gè)包,然后嘗試用您系統(tǒng)的包管理器這安裝這個(gè)包(如果可能的話,同時(shí)安裝它的-dev或者-devel版本 )
3。 (configure:) (error:) no acceptable cc found in <somedirectories>
您沒(méi)有安裝gcc或者cc環(huán)境變量沒(méi)有設(shè)置。用包管理器檢查gcc是否已經(jīng)安裝,如果沒(méi)有的話,安裝它。如果安裝了嘗試用這個(gè)命令
export CC=”/usr/bin/cc”
如果要永久性的話,你可以將這個(gè)命令添加的/etc/profile中(當(dāng)任何用戶登陸進(jìn)來(lái)時(shí)會(huì)執(zhí)行這個(gè)文件里很多的命令)這樣,您以后就不要再設(shè)置了。
4。(configure:) (error:) C++ preprocessor “/lib/cpp” fails sanity check
您的g++包或者失蹤了或者conrrupted了,請(qǐng)檢查您的包管理器(或者其他尋找和安裝包的方法)去尋找g++和安裝相應(yīng)的包。注意,許多發(fā) 行版并不稱為g++,比如說(shuō),F(xiàn)edora,在yum源里用gcc-g++來(lái)表示g++包。如果您找不到g++,你可以尋找c++,cpp和/或者gcc
5。(configure:) (error:) C++ preprocessor “CC (-E)” fails sanity check
這個(gè)是libtool的一些特定有bug的版本,它使configure腳本檢查libtool支持的編輯器。這個(gè)最快的解決辦法就是安裝g++(解決辦法如上)
上面就是Ubuntu安裝Nox后編譯make不通過(guò)的方法介紹了,如果你不會(huì)安裝Nox,又或者安裝好后無(wú)法通過(guò)make,那么可嘗試使用本文介紹的方法進(jìn)行解決。