1.linux下C程序的原始碼通常以c作爲後綴(cpp是C++的後綴,gcc會根據後綴來加載不同的鏈接庫,詳見:http://7613577.blog.51cto.com/7603577/1605240)。
2.程序編譯的幾個相關概念:
1)源碼:程序代碼,人類可以看得懂的程序語言
2)編譯程序:源碼編譯後的機器可以看得懂的代碼,通常以o作爲後綴
3)可執行文件:經過編譯程序編程二進制程序後,機器看得懂的可執行的檔案。
3.make相關介紹:
1)make指令執行後,會去找Makefile,通常軟件開發商都會寫一支偵測程序來偵測用戶的作業環境,以及該作業環境是否有軟件開發商所需要的其他功能,該偵測程序偵測完畢後,就會主動的建立這個Makefile的規則檔案,通常這支偵測程序的文件名爲configure或者config
2)偵測程序要偵測的內容有:
是否有適合的編譯程序可以編譯軟件的程序代碼
是否已經存在本軟件所需要的函式庫,或其他的相依軟件
操作系統平臺是否適合本軟件,包括linux的核心版本
核心表頭定義檔是否存在(驅動必須要的偵測)
3)同一款軟件在不同的平臺上安裝需要重新編譯。
4.gcc [-cO] [-l函式庫] [-L/函式庫目錄][Ipath] [-Wall] [-o targetfile] sourcefile:編譯程序,選項,
1)-c:編譯程序,生成*.o文件
2)-o:鏈接程序,產生可執行的文件,此時需要指定要生成的文件.
3)-O:可以優化程序,提高性能
4)-Wall:產生詳細的編譯信息
5)-l:加入某個函式庫,m代表libm.so這個動態鏈接庫
6)-L:後接路徑,表示函式庫要從哪裏去查找。
7)-I:後接include要查找的目錄
5.#include<stdio.h>:這句話的意思是將一些定義的數據由stdio.h這個檔案讀入,這包括printf的相關設定,這個檔案其實是放在/usr/include/stdio.h的。
6.make指令的優點:
1)簡化編譯時所需要下達的指令
2)若在編譯完成之後,修改某個原始碼檔案,則make僅會針對被修改了的檔案進行編譯,其他的Object file不會被更動。
3)最後可以依照相依性來更新執行檔。
7.makefile解讀:
1)基本格式:
target:目標文件1 目標文件2
<tab> gcc -o 欲建立的執行文件 目標文件1 目標文件2
2)target是我們要建立的信息,而且目標文件就是具有相關性的object files,那建立執行文件語法就是以<tab>按鍵開頭的那一行,命令行必須要以tab按鍵作爲開頭才行
3)makefile中用#代表註釋,<tab>必須在命令行的第一個字符,target與相依檔案(目標文件)之間以:隔開。
8.makefile中變量的基本語法:
1)變量與變量內容以=隔開,同時兩邊可以具有空格
2)變量左邊不可以具有<tab>
3)變量與變量內容在=兩邊不能具有:
4)在習慣上,變量最好以大寫字母爲主
5)運用變量時,以${變量}或$(變量)使用
6)在該shell的環境變量可以被套用,例如CFLAGS。
7)在指令模式也可以給予變量
9.當CFLAGS的內容指令列與makefile裏面並不相同時,取捨關係如下:
1)make指令列後面加上的環境變量爲優先
2)makefile裏面指定的環境變量第二
3)shell原本的環境變量第三。
10.一些特殊變量:$@代表目前的target。
11.tarball(壓縮包)軟件一般的安裝方式:
1)./configure:這個步驟是建立Makefile這個檔案,通常程序開發者會寫一支scripts來檢查linux系統,相關的軟件屬性等,經過偵測後,生成一個與本地環境適應的Makefile文件。
2)make clean:清除舊的編譯文件(*.o)
3)make:依據Makefile當中的預設進行編譯行爲。即將原始碼編譯爲可執行的文件,而這個可執行文件會放置在目前所在的目錄下,尚未被安裝到預定的目錄下。
4)make install:依據Makefile這個檔案關於install的項目,將上一個步驟產生的編譯完成的數據安裝到預定的目錄中。
12.動態與靜態函式庫
1)靜態函式庫:擴展名爲.a,這類函式庫在編譯的時候會直接整合到執行程序當中,所以一般該方式生成的可執行文件會比較大些。另外這類函式庫的最大優點就是可以獨立運行,不依賴於其他函式庫。但升級難度較大。
2)動態函式庫:擴展名.so,這類函式庫當執行檔要使用到函式庫的機制時,程序纔會讀取函式庫來使用,因此生成的文件會小一點。由於是動態讀取,因此該模式的函式庫獨立性較差,不過升級比較容易。
13.將動態函式庫加載到高速緩存中可以提高函式庫的存取效能,具體步驟爲:
1)首先,我們必須要在/etc/ld.so.conf裏面寫下想要讀入告訴緩存當中的動態函式庫所在的目錄(不是檔案)。
2)家下來則是利用ldconfig這個執行檔將/etc/ld.so.conf的資料讀入緩存當中。
3)同時也將數據記錄一份在/etc/ld.so.cache這個檔案中。
14.ldconfig [-f config] [-C cache] [-p]:將動態函數庫預先載入內存,參數:
1)-f:指定library函數庫的路徑(文件),默認是/etc/ld.so.conf
2)-C cache:指定cache的內容(文件名),默認/et/ld.so.cache
3)-p:列出目前所有函數庫資料內容(在/etc/ld.so.cache內的內容)
2.ldd [-vdr] [filename]:程序的動態函數庫解析,參數,
1)-v:列出所有內容信息
2)-d:重新將資料有遺失的link點顯示出來
3)-r:將ELF有關的錯誤顯示出來
3.md5sum/sha1sum [-bct] filename;md5sum/sha1sum [--status|--warn] --check filename:一種軟件安裝加密技術,參數,
1)-b:使用binary的讀檔方式,默認爲Windows/DOS 檔案型態的讀取方式。
2)-c:檢驗檔案指紋
3)-t:以文字形式來讀取檔案指紋。