一、源代碼簡介(文件中的代碼之間,很可能存在跨文件依賴關係)
源代碼(也稱源程序)是指未編譯的按照一定的程序設計語言規範書寫的文本文件,是一系列人類可讀的計算機語言指令。 在現代程序語言中,源代碼可以是以書籍或者磁帶的形式出現,但最爲常用的格式是文本文件,這種典型格式的目的是爲了編譯出計算機程序。計算機源代碼的最終目的是將人類可讀的文本翻譯成爲計算機可以執行的二進制指令,這種過程叫做編譯,通過編譯器完成。
二、源代碼的編譯過程
由於程序源代碼到可被計算機識別並運行的指令是需要多步驟處理的:程序源代碼 --> 預處理 --> 編譯 --> 彙編 --> 鏈接。
這裏以C,C++爲例做爲說明。程序員寫完C,C++源代碼後需要把源代碼進行預處理,即通過預處理器把源代碼分割或處理成爲特定的符號用來支持宏調用。預處理後進一步通過編譯器(gcc)編譯爲目標代碼(object code),它由接近於機器語言的代碼組成。目標代碼通過編譯器編譯後才能生成可供CPU識別的機器代碼、機器指令。由於C,C++在編寫中大量調用了庫文件,所以在編譯後需要把源代碼中使用到的庫做好鏈接。形成能夠依賴於共享庫獨立運行代碼。
LINUX包的二進制應用程序一般包含(二進制文件、庫文件、配置文件、幫助文件)。且在LINUX中二進制應用程序的組成部分爲:
二進制程序:/bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin
庫文件:/lib, /lib64, /usr/lib, /usr/lib64, /usr/local/lib, /usr/local/lib64
配置文件:/etc, /etc/DIRECTORY, /usr/local/etc
幫助文件:/usr/share/man, /usr/share/doc, /usr/local/share/man, /usr/local/share/doc
三、程序包編譯安裝的需求
在某些情況下,比如某個程序已經更新了新版本,但是因爲官方或其他組織還沒有編譯成RPM包,而我們此時需要用到此新版本程序的功能,或者當官方提供的RPM包中因爲集成了太多我們不需要的功能或缺少某些功能時。此時我們就需要考慮自己通過源代碼編譯安裝成可供LINUX識別的二進制安裝包。
但是要把源代碼變成可執行的二進制文件需要以下過程:程序源代碼 --> 預處理 --> 編譯 --> 彙編 --> 鏈接。想到這裏我們又不由自主的奔潰了。而且因爲程序在開發中一般是使用模塊開發的,所以文件中的代碼之間,很可能存在跨文件依賴關係。所以爲了方便用戶能夠自主編譯源代碼。所以有了項目管理器(make)。
make項目管理器會自動調用預處理器對源代碼進行預處理,後調用編譯器進行編譯,調用匯編器進行彙編,調用鏈接器進行鏈接。make針對每一個源代碼都有一個配置文件(makefile),它會定義先安裝那個包,調用什麼編譯器,程序安裝路徑,庫文件安裝路徑等配置。由於每個用戶的服務器環境和平臺各不相同,所以make項目管理器利用configure腳本,具體流程是客戶運行make提供的configure腳本傳遞程序安裝路徑,啓動的特性等信息,configure能結合Makefile.in模版文件生產滿足客戶平臺需求的makefile配置文件。
C、C++: make (configure --> Makefile.in --> makefile)
四、編譯安裝三步驟(./configure -> make -> make install)
①、./configure:
(1) 通過選項傳遞參數,指定啓用特性、安裝路徑等;執行時會參考用戶的指定以及Makefile.in文件生成makefile;
--help: 獲取其支持使用的選項
(2) 檢查依賴到的外部環境,如果此時依賴的外部環境沒有配置,會導致報錯。第一步報錯會導致make不能執行
②、make:
根據makefile文件,構建應用程序;
③、make install
把二進制文件、庫文件、配置文件、幫助文件複製到對應的目錄中
注意事項:
configure和Makefile.in是程序員通過兩個工具生成並提供給我們使用的
開發工具:
autoconf: 生成configure腳本
automake:生成Makefile.in
建議:安裝前查看INSTALL,README
開源程序源代碼的獲取:
官方自建站點:apache.org (ASF),mariadb.org,...
代碼託管:SourceForge,Github.com,code.google.com,...
五、編譯安裝httpd(httpd-2.4.16)
編譯安裝前提:提供開發工具及開發環境
開發工具:make, gcc等
開發環境:開發庫,頭文件,glibc(標準庫)
通過“包組”提供開發組件
CentOS 6: "Development Tools", "Server Platform Development",
①、通過官方網站下載httpd-2.2.31.tar.gz此源代碼包,並查看INSTALL文件
[root@localhost ~]# tar -zxvf httpd-2.2.31.tar.gz [root@localhost ~]# cd httpd-2.2.31 [root@localhost httpd-2.2.31]# ls ABOUT_APACHE CHANGES INSTALL os acinclude.m4 CMakeLists.txt InstallBin.dsp README Apache-apr2.dsw config.layout LAYOUT README.cmake Apache.dsw configure libhttpd.dsp README.platforms apache_probes.d configure.in LICENSE ROADMAP ap.d docs Makefile.in server build emacs-style Makefile.win srclib BuildAll.dsp httpd.dsp modules support BuildBin.dsp httpd.spec NOTICE test buildconf include NWGNUmakefile VERSIONING [root@localhost httpd-2.2.31]# more INSTALL APACHE INSTALLATION OVERVIEW Quick Start - Unix ------------------ For complete installation documentation, see [ht]docs/manual/install.html or http://httpd.apache.org/docs/2.2/install.html $ ./configure --prefix=PREFIX $ make $ make install $ PREFIX/bin/apachectl start ........ #這裏建議編譯安裝的時候首先讀INSTALL或README文件。$ ./configure->$ make->$ make install
②、因爲每個源碼提供的選項不盡相同,所以建議通過./configure --help查看需要的選項
[root@localhost httpd-2.2.31]# ./configure --help
③、通過./configure 跟特定需要的選擇通過Makefile.in開始構建生產makefile文件
[root@wlw httpd-2.2.31]# ./configure --prefix=/usr/local/apache2 --sysconfdir=/etc/httpd2
④、make通過生成的makefile文件調用預處理器,編譯器等開始編譯安裝程序包
[root@wlw httpd-2.2.31]# make
⑤、make install:把二進制文件、庫文件、配置文件、幫助文件複製到對應的目錄中
[root@wlw httpd-2.2.31]# make install
六、編譯安裝後的配置
(1) 導出二進制程序目錄至PATH環境變量中;
編輯文件/etc/profile.d/NAME.sh
export PATH=/PATH/TO/BIN:$PATH
[root@wlw httpd-2.2.31]# vim /etc/profile.d/ export PATH=/usr/local/apache2:$PATH
(2) 導出庫文件路徑
編輯/etc/ld.so.conf.d/NAME.conf
添加新的庫文件所在目錄至此文件中;
讓系統重新生成緩存:
ldconfig [-v]
[root@wlw ld.so.conf.d]# vim /etc/ld.so.conf.d/httpd2.conf /usr/local/apache2 [root@wlw ld.so.conf.d]# ldconfig [root@wlw ld.so.conf.d]# ldconfig -v #查看庫文件是否導入
(3) 導出頭文件
基於鏈接的方式實現
ln -s /usr/include/httpd /usr/local/apache2/include
(4) 導出幫助手冊
編輯/etc/man.config文件
添加一個MANPATH
[root@wlw ~]# vim /etc/man.config MANPATH /usr/local/apache2/man