在linux下安裝軟件,難免會(huì)碰到需要源碼安裝的,而就是這簡(jiǎn)簡(jiǎn)單單的./configure、make、sudo make install三步,卻讓不少人頭疼不已,這里以安裝X11為例具體介紹下我在安裝時(shí)的一點(diǎn)小經(jīng)驗(yàn),以便共同學(xué)習(xí),共同進(jìn)步!
首先,我們要做些準(zhǔn)備工作,源碼安裝少不了這幾個(gè)工具pkg-config、libtool、autoconf和automake(當(dāng)然,還有更基礎(chǔ)的,像zlib、m4等,這里就略過(guò)啦),其中,pkg-config是相對(duì)比較重要的,它就是向configure程序提供系統(tǒng)信息的程序,如軟件的版本、庫(kù)的版本以及庫(kù)的路徑等信息,這些只是在編譯期間使用。你可以打開(kāi)/usr/lib/pkgconfig下任意一個(gè).pc文件,就會(huì)發(fā)現(xiàn)類似下面的信息(X11的pc文件):
prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
xthreadlib=-lpthread
Name: X11
Description: X Library
Version: 1.3.3
Requires: xproto kbproto
Requires.private: xcb = 1.1.92
Cflags: -I${includedir}
Libs: -L${libdir} -lX11
Libs.private: -lpthread
configure就是靠著這些信息來(lái)判斷軟件版本是否符合要求的。接著來(lái)看看pkg-config是怎樣工作的,缺省情況下,pkg-config首先在usr/lib/pkgconfig/中查找相關(guān)包(譬如x11)對(duì)應(yīng)的相應(yīng)的文件(x11.pc),若沒(méi)有找到,它也會(huì)到PKG_CONFIG_PATH這個(gè)環(huán)境變量所指定的路徑下去找,若是還沒(méi)有找到,它就會(huì)報(bào)錯(cuò)。所以這里就可以得到一些解決configure時(shí)提示**庫(kù)未找到的辦法了,先用命令"ldconfig -p | grep 庫(kù)名"來(lái)分析該庫(kù)是否安裝及其路徑,若返回空,則說(shuō)明該庫(kù)確實(shí)未安裝,否則,可以根據(jù)該命令的返回結(jié)果找到庫(kù)的安裝地點(diǎn),然后設(shè)置其環(huán)境變量,命令如下:
"export PKG_CONFIG_PATH=軟件位置/lib/pkgconfig:$PKG_CONFIG_PATH",這里有個(gè)常識(shí),軟件安裝后,.pc文件都是在安裝目錄下的lib/pkgconf中的。這樣只會(huì)在當(dāng)前命令窗口有效,當(dāng)然,你也可以修改home文件夾下的.bashrc文件(帶.的文件為隱藏文件,可以用命令vi .bashrc編輯),在文件末尾加上上面那句命令,重新登錄即可。其他的幾個(gè)在linux下也是不可或缺的,libtool為管理library時(shí)使用,沒(méi)裝的話錯(cuò)誤提示如下:possibly undefined macro:AC_PROG_LIBTOOL。而autoconf和automake可以用于在某些沒(méi)有configure的文件的源碼包安裝時(shí)使用(pixman就是個(gè)典型的例子,安裝了二者后直接./autogen.sh就可以安裝了)。
準(zhǔn)備工作做好后,就可以安裝了,具體全部命令如下:
tar vxf libX11-6.2.1.tar.gz
cd libX11-6.2.1
mkdir X11-build
cd X11-build
../configure –prefix=/usr/local/X11R6
make
echo $
sudo make install
這里有一些好的安裝習(xí)慣可以積累一下:1、建立一個(gè)臨時(shí)編譯目錄,本例中為X11-build,這樣可以再安裝完成后刪除該目錄,進(jìn)而可以節(jié)省空間,而且保持了源碼目錄的整潔;2、安裝到指定目錄,本例中為/usr/local/X11R6,最好把幾個(gè)相關(guān)的安裝在同一文件夾下,如這里的X11R6文件夾,這樣便于管理,否則全部默認(rèn)安裝在/usr/local下,很雜亂;3、編譯完成后做檢查,本例為echo $,表示檢查上一條命令的退出狀態(tài),程序正常退出返回0,錯(cuò)誤退出返回非0,也可以使用make check,主要為了防止make失敗后直接install,進(jìn)而出現(xiàn)了一些莫名其妙的錯(cuò)誤。這里還介紹一種更方便快捷的安裝方法,用&&將安裝命令連接起來(lái),如../configure –prefix=**&&make&&sudo make install,這樣,只有在前面的命令執(zhí)行正確的情況下,后面的任務(wù)才會(huì)執(zhí)行,多方便!
除此之外,安裝之前可以閱讀下源碼包中的readme和install等文檔,往往有所需軟件及其下載地址,還包括一些安裝技巧和配置選項(xiàng)。另外,在configure前,先輸入configure –help,可以查看有哪些選項(xiàng)可以添加。還有幾個(gè)關(guān)系安裝成功的東西就是ldconfig了,在安裝時(shí)如果提示找不到某個(gè)庫(kù)或者在編譯時(shí)提示找不到**.so文件,就要用到它了,最簡(jiǎn)單的解決辦法就是sudo gedit /etc/ld.so.conf,在文件中加入**.so文件所在路徑,再運(yùn)行一下ldconfig就可以了,但是我對(duì)這個(gè)東西有陰影,不知道是因?yàn)橛昧颂摂M機(jī)還是其他的原因,有7、8次我在運(yùn)行完ldconfig后,Ubuntu就沒(méi)辦法打開(kāi)任何窗口了,直接關(guān)機(jī)重啟就更是進(jìn)不去系統(tǒng)了,崩潰之,不知道有沒(méi)有高手有解決辦法。在這里提供一種代替ldconfig的辦法,就是export LD_LIBRARY_PATH=*.so文件地址:$LD_LIBRARY_PATH,用它我就舒心多了,也就是麻煩點(diǎn),哥忍了,總比系統(tǒng)崩潰強(qiáng)多了吧,呵呵!其實(shí),在configure時(shí)碰到問(wèn)題,你應(yīng)該慶幸,因?yàn)槟憧梢愿鶕?jù)它很明顯的提示找到缺失的東西裝上,在配置下pkgconfig和ldconfig基本上就可以搞定了,但是make的時(shí)候就沒(méi)那么簡(jiǎn)單了。
編譯時(shí)提示最多的就是**東西未找到了,要么是庫(kù)文件,要么是頭文件,庫(kù)文件用上面的ldconfig基本上就可以搞定,頭文件的話需要配置包含的路徑,和庫(kù)的類似,命令如下:
export LD_INCLUDE_PATH=/usr/local/include:$LD_INCLUDE_PATH
在這個(gè)時(shí)候最重要的就是淡定了,循著丫的error往上找,像"No such file or directory"這樣的錯(cuò)誤提示肯定就在附近,找到了,include之就可以咯!
WindowsSubsystem for Linux(WSL)2對(duì)Windows10版本1903和1909的支持 根據(jù)客戶......
閱讀微軟已經(jīng)向開(kāi)發(fā)通道中的Windows Insiders宣布了Windows 10 Insider Prev......
閱讀bull; Wine最近收到了對(duì)6.0版的更新。 bull; 此更新改進(jìn)了使用Wine的......
閱讀有趣的是,微軟正在努力使Linux在Windows10下運(yùn)行。我們都熟悉W......
閱讀適用于 Linux 的 Windows 子系統(tǒng)既是一種啟示,也是一場(chǎng)革命。現(xiàn)在......
閱讀最近一些朋友問(wèn)小編Linux下如何設(shè)置交換文件?今天小編將為大家?guī)?lái)的是Linux下設(shè)置交換文件的方法,希望對(duì)大家會(huì)有幫助,有需要的朋友一起去看看吧...
次閱讀
今天小編將為大家分享的是Linux中遇到device is busy的處理方法。希望對(duì)大家會(huì)有幫助,有需要的朋友一起去看看吧...
次閱讀
今天小編為大家?guī)?lái)的是Linux中RedHat CentOS Ubuntu Fedora的區(qū)別詳解,希望對(duì)大家會(huì)有幫助,有需要的朋友一起去看看吧...
次閱讀
最近有些朋友問(wèn)小編如何用Windows通過(guò)網(wǎng)絡(luò)安裝RedHat Linux?今天小編為大家?guī)?lái)的是用Windows通過(guò)網(wǎng)絡(luò)安裝RedHat Linux的方法,有需要的朋友一起去看看吧...
次閱讀
Emacs是公認(rèn)的最好的代碼編輯器之一。由于默認(rèn)編碼跟文檔編碼不同會(huì)導(dǎo)致Emacs經(jīng)常出現(xiàn)亂碼!這種情況該如何解決呢?下面小編就為大家分享Linux下打開(kāi)Emacs出現(xiàn)亂碼的解決方法!有需要...
次閱讀
今天小編要為大家分享的是Linux下安裝vagrant過(guò)程遇到的問(wèn)題解析,希望可以幫助到大家,有需要的朋友一起去看看吧...
次閱讀
最近有些朋友問(wèn)小編 Linux菱形亂碼如何修改? 今天小編將為大家分享的是Linux菱形亂碼的修改方法,希望對(duì)大家會(huì)有幫助,有需要的朋友可以參考下...
次閱讀
今天小編為大家?guī)?lái)的是從Vim中訪問(wèn)shell或者運(yùn)行外部命令的方法,希望對(duì)大家會(huì)有幫助,有需要的朋友一起去看看吧...
次閱讀
今天小編為大家?guī)?lái)的是Linux下設(shè)置權(quán)限讓用戶只刪除自己的文件的方法,希望對(duì)大家會(huì)有幫助,有需要的朋友一起去看看吧...
次閱讀
您是否檢查過(guò)您的 PC 是否符合更新到 Windows 11 的條件,但結(jié)果卻令人失望?在 Windows 10 之外繼續(xù)使用筆記本電腦或臺(tái)式機(jī)的少數(shù)選擇之一是安裝 Linux。這就是為什么這...
次閱讀
今天小編要為大家?guī)?lái)的是Linux使用文本瀏覽器lynx并顯示中文的方法!希望對(duì)大家會(huì)有幫助,有需要的朋友一起去看看吧...
次閱讀
最近一些Linux用戶發(fā)現(xiàn)很多日志文件都是空文件,如何過(guò)濾呢?今天小編就為大家?guī)?lái)Linux過(guò)濾空文件的命令總結(jié),希望對(duì)大家會(huì)有幫助,有需要的朋友一起去看看吧...
次閱讀
最近一些朋友問(wèn)小編Linux Mint如何設(shè)置面板位置以及添加面板元素?今天小編將為大家分享的是Linux Mint設(shè)置面板位置以及添加面板元素的方法,希望對(duì)大家會(huì)有幫助,有需要的朋友一起去...
次閱讀
今天小編要為大家分析的內(nèi)容是linux下鏈接庫(kù)失敗的原因分析,希望對(duì)大家會(huì)有幫助,有需要的朋友一起去看看吧...
次閱讀
今天小編為大家?guī)?lái)的是Linux刪除制定時(shí)間的文件的方法,希望對(duì)大家會(huì)有幫助,有需要的朋友一起去看看吧...
次閱讀