【Linux小技巧】源碼安裝那些事

前言

《深圳男子圖鑑》搬磚ing,但是還是不要忘了學習啊。

Linux安裝軟件一直是一個難以形容的東西,記得剛進小組的Linux知識技能大賽就是安裝一個軟件(ntfs-3g?)。那麼對於Linux下除了方便的包管理系統rpm yum apt-get 等等等等,可以讓我們輕鬆愉快的安裝軟件之外,還有一種很重要的安裝方式,就是源碼編譯安裝。

對於C/C++這種 一次編寫,反覆調,啊不是,一次編寫,到處編譯運行的代碼,用源碼編譯來安裝幾乎是最完美的方式了(ABI問題等等)。

最近在耗時好久完成一次源碼編譯安裝+鏈接開發之後,又收穫了很多知識,趕緊總結一下。

正文

需要安裝的軟件是ProtoBuffer,因爲開發環境很麻煩,所以直接上傳源碼包安裝。
照例我們需要執行

./configure
make
make install

Ok,那麼問題來了。
我們需要編譯出的可執行程序protoc,還有他的so庫libprotobuf
但是目前呢,按照這個流程會將protoc放在/usr/bin libprotobuf放在/usr/lib
但是如果我不想讓他這樣子呢(纔不會說是沒權限呢)
我只希望能把這些東西生成在我自己的目錄下。

不得不說google的開源項目還是挺良心的,在INSTALL.txt下有這樣的說明

By default, make install will install the package’s files in
/usr/local/bin, /usr/local/man, etc. You can specify an
installation prefix other than /usr/local by giving ‘configure’ the
option --prefix=PATH.

enmm之前一直覺得configure只是檢測一下系統的配置依賴啥的,才知道還可以控制之後的Makefile,對整個編譯過程都有影響。

同時,我們知道對於這種庫,需要在gcc的參數裏制定鏈接路徑-L和頭文件路徑-I.
想起了C鏈接MySQL時用到的MySQL的C客戶端了,當時有個東西叫mysql_config,安裝MySQL的C客戶端自帶的好像,再需要鏈接MySQL的庫時直接加上`mysql_config - -libs`就行了,不用自己再手動去找路徑了。
而今天發現了有類似功能的東西–pkg-config

像pb在源碼編譯安裝時就會產生一個protobuf.pc的文件。存在於/usr/bin/pkgconfig下,它裏面的內容如下

prefix=/home/kang
exec_prefix=\${prefix}
libdir=\${exec_prefix}/lib
includedir=${prefix}/include

Name: Protocol Buffers
Description: Google's Data Interchange Format
Version: 2.6.1
Libs: -L\${libdir} -lprotobuf -pthread  -lpthread
Libs.private: -lz 
Cflags: -I${includedir} -pthread
# Commented out because it crashes pkg-config *sigh*:
#   http://bugs.freedesktop.org/show_bug.cgi?id=13265
# Conflicts: protobuf-lite

so 如果我們想開發需要pb的程序,就不用再手動-L啥的了,直接編譯時加上`pkg-config --libs(後面也要有那個點,md太蛋疼了,我不知道咋加)
瞄了一眼,似乎源碼編譯安裝的庫都會可以通過pkg-config來操作呢,真是很方便。

最近還學到一個知識點是gcc的-D參數可以傳遞宏,控制條件編譯,比如設置的很多斷言啊,就可控制略掉了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章