Linux手動編譯源代碼文件

一、簡介

    Linux系統上程序包安裝的方式多種多樣,一般來說可通過rpm包安裝、yum在線安裝等方式實現。但有時候為了實現某種功能,而這種功能在通常情況下又不是太常用或是因為其他原因,不能通過yum下載安裝或在網上沒有找到rpm包,只是找到了程序安裝包的源代碼的話,這種情況下我們就可以對源代碼直接進行編譯安裝,以便解決這種臨時需求。當然這只是其中一種情況,而因為其他原因而采用源代碼編譯安裝的情況也經常存在,所以有必要梳理下采用源代碼安裝程序包的安裝方式。

   手動編譯源代碼文件通常需要依賴相關的庫環境、編譯開發工具等,不同語言編寫的源代碼它們所依賴的頭文件、本地庫、編譯工具和被依賴的程序包的開發組件等各不相同。

二、用法詳解

 一般來說帶“devel”關鍵字的rpm包都是這個程序包的開發組件。

   包組(此處列出包組僅適用于centos6,其他版本名稱各有不同):

   Development tools(含編譯器、匯編器、鏈接器等工具,必須)

   Server Platform Development(服務器平臺開發組件,必須)

   Desktop Platform Development(桌面平臺開發組件,非必須,視情況安裝)

   Debug Tools(非必須,視情況安裝)

 被依賴的程序包的開發組件:兩種方式:

   (1) 編譯安裝被依賴的程序;

   (2) 安裝相關程序的名稱中包含devel的子包;

例:安裝開發工具組件,命令為:yum groupinstall "開發工具" ,詳情見下圖:

blob.png

例:安裝服務器平臺開發組件,命令為:yum groupinstall "服務器平臺開發" ,詳情見下圖:

blob.png

安裝好開發套件之后就可以進行相關配置操作。

GNU make:配置文件:makefile

注意:

(1)每個項目的程序員開發完成某版本之后,會使用autoconf為程序代碼生成一個腳本文件:configure;

功用:此腳本會收集當前系統上的開發環境中所依賴各組件的版本、特性等,并檢查所依賴的環境是否能滿足,最后會根據Makefile.in 文件生成一個makefile文件;

(2)每個項目的程序員開發完成某版本之后,會使用automake為程序代碼生成一個makefile模板文件,即Makefile.in。

編譯人員的編譯安裝過程:

   (1) 運行configure腳本;常使用選項指明:

      安裝路徑: –prefix=/usr/local/nginx (該路徑如不存在會自動創建)

      啟用或禁用的特性;

      依賴的程序包;

   (2) 運行make命令,完成項目構建;

   (3) 運行make install命令,完成安裝(大多數情況只有管理員有權限執行此命令);

注意:前兩步只需要普通用戶權限,建議使用普通用戶身份進行;最后一步根據安裝路徑的指定,可能會用到管理權限。

configure腳本的應用:

   –help: 查看幫助信息;

   –prefix: 指定默認安裝路徑;

   –sysconfdir: 指定配置文件安裝路徑

   –with-CAPABILITY(依賴某特性)

   –without-CAPABILITY(不依賴某特性)

   –enable-FEATURE(啟用某特性)

   –disable-FEATURE(禁用某特性)

例:安裝nginx-1.6.2.tar.gz源代碼安裝包,詳情見下圖:blob.png

blob.png

blob.png

blob.png

例:安裝源代碼格式的httpd程序包 ,詳情見下圖:

blob.png

blob.png

blob.png

程序運行環境:

二進制文件:$PATH環境變量指明的路徑下,/bin, /sbin, /usr/bin, /usr/sbin,/usr/local/bin,/usr/local/sbin

自己編譯的程序文件安裝路徑如果不在PATH環境變量指定的程序搜索路徑中:

(1) 使用絕對路徑;

(2) 編譯PATH環境變量,加入此些程序文件所在目錄;

export PATH=extra_path:$PATH

把上面的命令保存于/etc/profile.d/*.sh文件中

blob.png

庫文件:

默認情況下,大多數應用程序都依賴于標準庫某些共享庫文件,甚至于某些應用提供的特定的庫文件;

Linux系統會在特定路徑下為應用查找所依賴的庫文件:/lib64, /lib, /usr/lib64, /usr/lib

自己編譯安裝的程序提供的庫文件有可能不在系統搜索路徑中,解決辦法:兩步驟:

(1) 編輯/etc/ld.so.conf.d/*.conf文件,添加新庫文件搜索路徑至此文件中,每行一個;

(2) 執行ldconfig命令,重新生成庫映射緩存ld.so.conf

ldconfig命令:configure dynamic linker run-time bindings

用于生成/etc/ld.so.cache

常用選項:

-p: 打印當前系統ld.so.cache中已經緩存的所有庫文件目錄及庫文件映射列表;

-v: 顯示命令執行過程的詳細信息;

blob.pngblob.pngblob.png

blob.pngblob.png

blob.png

blob.png

頭文件導出方案:

方法:

(1) 復制所有新生成的頭文件至/usr/include目錄中(不推薦);

(2) 創建鏈接

  ln -sv /usr/local/apache/include /usr/include/httpd

  ln -sv /usr/local/apache/include/* /usr/include/

blob.pngblob.png

man手冊文件:

Linux會到特定目錄下查找用戶需要使用命令手冊

路徑:/etc/man.config配置文件中,使用MANPATH指令指向的路徑;

方法:

(1) 在此文件新增MANPATH指令,并指向新的命令手冊路徑;

(2) 在man命令執行時使用-M選項顯式指定手冊而查找路徑即可;

blob.png

blob.pngblob.png

blob.pngblob.pngblob.png

注意:如果安裝的程序是一個服務類程序,rpm安裝的方式通常為自動生成服務腳本文件(此文件為rpm制作者所提供),但編譯安裝不會有;需要卸載時只需刪除安裝目錄即可。

注意:編譯安裝的程序包,盡可能把所有文件安裝至一個專用路徑下,卸載時刪除此目錄即可;

其它程序語言(如:perl, python, ruby, java)開發的源碼包,編譯安裝方式可能會有所不同;

這種情況一般查看INSTALL, README文件里的使用說明即可。

原創文章,作者:鏡花水月,如若轉載,請注明出處:http://www.www58058.com/8433

(2)
鏡花水月鏡花水月
上一篇 2015-09-26
下一篇 2015-09-27

相關推薦

  • LVM 邏輯卷管理

    一、概述: LVM: logical Volumn Manager  LVM是建立在硬盤和分區之上的一個邏輯層。可以將多個物理分區整合起來,無需停機,可以對文件系統的大小進行調整。同時,還提供快照功能 二、概念及實現過程: PE :每一個物理卷PV被劃分為稱為PE(Physical Extents)的基本單元,具有唯一編號的PE是可以被LVM尋址的…

    Linux干貨 2015-10-05
  • 文本處理工具練習題(包含正則)

    正則練習題(包含文本處理練習題) 問題 找出ifconfig命令結果中本機的所有IPv4地址  查出分區空間使用率的最大百分比值 查出用戶UID最大值的用戶名、UID及shell類型 查出/tmp的權限,以數字方式顯示 統計當前連接本機的每個遠程主機IP的連接數,并按從大 到小排序 答; ifconfig | grep -o '[0-9]\…

    Linux干貨 2016-08-08
  • 網卡別名及多網卡配置

    網卡別名 對于要在不同網段環境中使用的設備有很大的幫助。     要使用網卡別名首先要關閉NetworkManager這個服務,防止在后續操作中引起不必要的沖突。 [root@laodeng6 ~]# chkconfig NetworkManager off [root@laod…

    Linux干貨 2016-09-06
  • 馬哥教育網絡班21期+第8周課程練習

    1、請描述網橋、集線器、二層交換機、三層交換機、路由器的功能、使用場景與區別 集線器(HUB)是在OSI模型的第一層——物理層——連接多臺主機、延長網絡的設備。其主要功能是將從一個端口接收到的數據包轉發給所有端口。中繼器(Repeater)是將由電纜傳過來的電信號或光信號調整波形和放大再傳給另一個電纜的設備,提供多端口服務的中繼器稱作集線器。二者的主要區別是…

    Linux干貨 2016-08-29
  • 馬哥教育網絡班22期+第3周課程練習

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。    [test2@localhost ~]$ who |cut -d " " -f1|sort -u   &nbsp…

    Linux干貨 2016-08-30

評論列表(2條)

  • 云中鶴
    云中鶴 2015-09-26 22:50

    寫的這么用心

    • 鏡花水月
      鏡花水月 2015-09-26 23:20

      @艾賀謝謝,希望在自己記錄博客的同時,能幫助到大家 。

欧美性久久久久