程序包編譯安裝java
爲何要對程序包進行編譯安裝?nginx
有些特性是編譯選定的,若是編譯未選定此特性,將沒法使用。c++
rpm包的版本會落後於源碼包,甚至落後不少。apache
一般咱們的安裝分兩鍾:vim
第一是從網上下載testapp-VERSION-release.src.rpm源碼包,編譯後進行安裝---咱們今天探討的問題緩存
第二種是使用rpmbuild命令製做成二進制格式的rpm包,然後再安裝;
bash
首先了解一個源碼到執行經歷了哪些路途網絡
代碼執行的過程:源代碼 --> 預處理 --> 編譯(gcc) --> 彙編 --> 連接 --> 執行app
源代碼組織格式:多文件:文件中的代碼之間,極可能存在跨文件依賴關係;maven
源碼安裝的原理是什麼呢?
C、C++: make (configure --> Makefile.in --> makefile)
源碼安裝過程的簡單介紹:源碼程序包裏有一個configuer的命令,它經過Makefile.in模版生成一個makefile文件。 make經過makefile文件的設定組織源碼生成一個二進制程序包,而後makeinstall安裝到指定路徑就能夠了。 注:make 是c、c++源碼的項目管理工具 小拓展:java: maven 注:maven是jave源碼的項目管理工具
C代碼編譯安裝三步驟:
建議:安裝前查看INSTALL,README
第一步:./configure:
做用:(1) 經過選項傳遞參數,指定啓用特性、安裝路徑等;執行時會參考用戶的指定以及Makefile.in文件生成makefile;
(2) 檢查依賴到的外部環境;
第一步使用方法詳解:
./configure 選項:指定安裝位置、指定啓用的特性
--help: 獲取其支持使用的選項
選項分類:
安裝路徑設定:
--prefix=/PATH/TO/SOMEWHERE: 指定默認安裝位置;默認爲/usr/local/
--sysconfdir=/PATH/TO/SOMEWHERE:配置文件安裝位置;
可選特性:
--disable-FEATURE
--enable-FEATURE[=ARG]
可選包:
--with-PACKAGE[=ARG]
--without-PACKAGE
第二步:make:
做用:根據makefile文件,構建應用程序; 注:直接make就行
第三步:make install 注:直接make install就行
做用:就是爲了把編譯好的文件放在指定的路徑下 【配置文件、庫文件 幫助文件】)
你們確定如今就像去編譯了吧,咱們還須要一點準備工做
編譯C源代碼:前提:提供開發工具及開發環境
開發工具:make(項目構成工具), gcc (c源碼的編譯器)
開發環境:開發庫(glibc:標準庫),頭文件
以上須要的環境,咱們只須要安裝兩個包組,就能夠愉快的編譯了
CentOS 6和7: "Development Tools", "Server Platform Development",
安裝之後,小夥伴們別急。想使用勞動成果還須要作一下工做呢
安裝後的配置:
(1) 導出二進制程序目錄至PATH環境變量中;
編輯文件/etc/profile.d/NAME.sh
export PATH=/PATH/TO/BIN:$PATH
(2) 導出庫文件路徑
編輯/etc/ld.so.conf.d/NAME.conf
添加新的庫文件所在目錄至此文件中;
讓系統從新生成緩存:
ldconfig [-v]
(3) 導出頭文件
基於連接的方式實現:
ln -sv
(4) 導出幫助手冊
編輯/etc/man.config文件
添加一個MANPATH
舉例完整編譯nginx程序
前提:準備開發環境(編譯環境)
紅帽5 安裝「Development Tools」和「Developments Libraries」
拿到源程序後先tar解壓縮,而後cd到目錄裏面去
#tar xf tengine-1.4.2.tar.gz
#cd tegnine-1.4.2
./configure
--prefix=/path/to/somewhere 注:軟件安裝的位置
--sysconfdir=/path/to/conffile_path 注:指定配置文件的路徑
例如:./configure --prefix=/usr/local/tengine --conf-path=/etc/tengine/tengine.conf
#make 注:編譯
#make install 注:安裝
# /usr/local/tengine/sbin/nginx 注:啓動nginx程序
此時/usr/local/tengine/sbin不在環境變量裏,全部必須全路徑才能夠啓用。
#vim /etc/profile
PATH=$PATH:/user/local/tengine/sbin 注:在export以前一行添加,而後讓系統重讀這個腳本
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC
#source /etc/profile 讓系統重讀此文件,須要重啓機器才能夠有效。或者不重讀,從新登錄一下機器也能夠生效
注意:
咱們安裝軟件包,若是安裝在非默認路徑下要修改path環境變量
一、修改PATH環境變量,以可以識別此程序的二進制文件路徑
方法一:修改/etc/profile文件
方法二:在/etc/profile.d/目錄創建一個以.sh爲名稱後綴的文件,在裏面定義export PATH=$PATH:/path/to/somewhere
二、默認狀況下,系統搜索庫文件的路徑/lib, /usr/lib,要增添額外搜尋路徑
在/etc/ld.so.conf.d/ 中建立 .conf爲後綴名的文件,然後把要增添的路徑直接寫至此文件中(下次重啓能找到庫了)
#ldconfig (執行此命令能夠從新搜尋庫文件)
-v:顯示從新搜尋庫的過程
三、頭文件(二次開發的軟件提供輸出庫功能的,它都有頭文件),任何一個二進制程序要想調用別人的庫,要提早聲明幷包含到當前系統中
來。就須要include包含庫文件所提供的功能的
頭文件裏有函數、參數、以及參數類型等相關屬性
頭文件須要輸出給系統,默認:/usr/include
自定義:增添頭文件搜尋路徑,使用連接
把/usr/local/tengine/include/ 連接到/usr/include/下有兩種方法
第一:ln -s /usr/local/tengine/include/* /usr/include/ 注:不應變文件名,把include下全部文件連接到/include這個目錄下
第二:ln -s /usr/local/tengine/include /usr/include/tengine 注:把include目錄連接到include/下的一個目錄,並命名tengine
四、手動編譯的man文件不在標準路徑的時候。
man文件路徑:安裝在--prefix指定的目錄下的man目錄。 標準:/usr/share/man
方法一:man -M /PATH/TO/MAN_DIR COMMAND
方法二:在/etc/man.config中添加一條「MANPATH //usr/local/tengine/man」
netstat:顯示網絡情況的命令
-r:顯示路由表
-n:以數字方式顯示
-t:顯示tcp的鏈接
-u:顯示udp鏈接
-l:顯示監聽狀態的鏈接
-p:顯示監聽指定的套接字的進程的進程號及進程名
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
瞭解:開發工具:autoconf: 生成configure腳本 automake:生成Makefile.in
看了這個你大概知道源碼包裏configure和 Makefile.in怎麼來的了。
開源程序源代碼的獲取:
官方自建站點:
apache.org (ASF)
mariadb.org
...
代碼託管:
SourceForge
Github.com
code.google.com