1.linux下C程序的原始碼一般以c做爲後綴(cpp是C++的後綴,gcc會根據後綴來加載不一樣的連接庫,詳見:http://7613577.blog.51cto.com/7603577/1605240)。
linux
2.程序編譯的幾個相關概念:shell
1)源碼:程序代碼,人類能夠看得懂的程序語言編程
2)編譯程序:源碼編譯後的機器能夠看得懂的代碼,一般以o做爲後綴緩存
3)可執行文件:通過編譯程序編程二進制程序後,機器看得懂的可執行的檔案。ide
3.make相關介紹:函數
1)make指令執行後,會去找Makefile,一般軟件開發商都會寫一支偵測程序來偵測用戶的做業環境,以及該做業環境是否有軟件開發商所須要的其餘功能,該偵測程序偵測完畢後,就會主動的創建這個Makefile的規則檔案,一般這支偵測程序的文件名爲configure或者config性能
2)偵測程序要偵測的內容有:優化
是否有適合的編譯程序能夠編譯軟件的程序代碼加密
是否已經存在本軟件所須要的函式庫,或其餘的相依軟件spa
操做系統平臺是否適合本軟件,包括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:以文字形式來讀取檔案指紋。