編譯就是講開發者提供的源代碼,通過編譯器,匯編器,連接器轉換成可以直接在操作系統上運行的二進制指令的過程。C/C++源碼的編譯通常包括以下幾個過程:
預處理(Preprocessing) 編譯(Compilation) 匯編(Assembly) 鏈接(Linking)
gcc編譯器的大體過程如下圖所示:
Linux中源碼編譯前我們首先需要依賴環境的支持,即編譯工具、以及各個被依賴的程序包的開發組件:
1.編譯的工具包組有:
Development tools
Server Platform Development
Desktop Platform Development
Debug Tools
2.被依賴的程序包的開發組件:
(1)編譯安裝被依賴的程序;
(2)安裝相關程序的名稱中包含devel的子包;
由于源碼包中的源碼文件存放在多個文件中,彼此之間存在著依賴關系,所以我們需要項目管理工具,相對于C/C++我們通常使用的是GNU make。項目構建工具會根據配置文件(makefile)中定義的次序對源碼文件進行編譯。
編譯安裝的過程如下:
1.運行configure腳本
configure腳本的應用:
–prefix:指定默認安裝路徑
–sysconfdir:指定配置文件安裝路徑
–with-CAPABLILITY:依賴的程序包
–without-CAPABILITY:不依賴的程序包
–enable-FEATURE:啟用某個特性
–disable:禁用某個特性
2.運行make命令,完成項目構建
3.運行makeinstall命令,完成安裝
我們以Apache為例進行演示:
經過上述三步,編譯安裝的基本步驟已經完成,下面我們需要將編譯生成的二進制程序文件路徑,庫文件路徑,以及頭文件,man幫助手冊路徑寫入系統的環境變量當中: 1).在/etc/profile.d/下建立一個以.sh結尾的文件將/usr/local/apache2/bin路徑添加進去。
2).在/etc/ld.so.conf.d下面建立一個以.conf結尾的的文件將庫文件路徑寫進去。并執行ldconfig命令,重新生成庫映射緩存ld.so.conf.
[root@localhost ~]# ldconfig
3).將頭文件生成軟連接到/usr/include中 4).將man手冊路徑添加到/etc/man.conf當中(CetenOS 6.8)
測試安裝是否成功:
[root@localhost include]# apachectl start httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName [root@localhost include]# netstat -ant Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp0 0 0.0.0.0:111 0.0.0.0:* LISTEN tcp0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp0 0 0.0.0.0:38326 0.0.0.0:* LISTEN tcp0 0 127.0.0.1:631 0.0.0.0:* LISTEN tcp0 0 127.0.0.1:250.0.0.0:* LISTEN tcp0 64 10.1.250.133:22 10.1.250.21:2519ESTABLISHED tcp0 0 :::58111:::*LISTEN tcp0 0 :::111 :::*LISTEN tcp0 0 :::80 :::*LISTEN #80端口已經出現 tcp0 0 :::22 :::*LISTEN tcp0 0 ::1:631 :::*LISTEN tcp0 0 ::1:25 :::*LISTEN
關閉防火墻:
[root@localhost include]# iptables -F
用links瀏覽器測試:
顯示It works表明安裝成功,并且服務已經開啟。
原創文章,作者:YOUNG,如若轉載,請注明出處:http://www.www58058.com/39503