在看Linux程式設計這本書,第一章主要講解了Linux程式設計相關的基礎内容,在此記錄一下,不然過不了多久又忘了。。
應用程式通常存放在特定目錄中:
/bin:二進制檔案目錄,用于存放啟動系統時用到的程式。
/usr/bin:使用者二進制檔案目錄,用于存放使用者使用的标準程式。
/usr/local/bin:本地二進制檔案目錄,用于存放軟體安裝的程式。
/sbin和/usr/sbin:存放系統管理工具的目錄。
linux修改PATH的方法:
1.指令行輸入PATH=$PATH:/path,增加path到PATH中,使用者登出之後PATH恢複原樣。
2.修改~目錄下得.bash_profile或.profile或.bashrc檔案,在其中加入PATH=$PATH:path,後使用source .bash_profile使其生效,此方法隻對目前使用者有效。
3.修改/etc/profile檔案,類似于方法2,此方法對所有使用者有效。
頭檔案:
C語言頭檔案一般存放在/usr/include目錄及其子目錄中。
依賴于特定Linux版本的頭檔案存放在/usr/include/sys和/usr/include/linux中。
X圖形界面頭檔案存放在/usr/include/X11中。
GNU c++頭檔案存放在/usr/include/c++中。
gcc編譯器可以使用gcc -I 來指定頭檔案所在目錄,例如:
gcc -I./include main.c gcc将在目前目錄的include子目錄下查找main.c中包含的頭檔案。
庫檔案:
靜态庫的特點:
每一個使用同一個函數庫的程式運作時都會在記憶體中有同一函數的多份副本,程式檔案自身也有多份 副本,消耗記憶體和磁盤空間。
動态庫特點:
程式本身不包含共享庫的函數代碼,而是引用運作時可通路的共享代碼,當編譯好的程式被轉載到内 存中執行時,函數引用被解析并産生對共享庫的調用,如果有必要,共享庫才被加載到記憶體中。通過 這種方法,系統可以隻保留一份副本供所有程式同時使用,且共享庫的更新可以獨立于依賴它的應用程式。
标準系統庫一般存放在/lib和/usr/lib目錄中。
庫檔案的名字總是以lib開頭,随後部分指明是什麼庫,檔案名最後以.開始,說明庫檔案類型
.a代表傳統靜态函數庫
.so代表共享函數庫
gcc可以使用完整庫檔案路徑來指定庫檔案,也可使用 -l來告訴編譯器要搜尋的庫檔案,例如: gcc -o main main.c /usr/lib/libm.a 或 gcc -o main main.c -lm 效果一樣
預設情況下gcc隻在标準位置搜尋庫檔案,可使用-L标準為編譯器添加搜尋路徑,例如:
gcc -o main -L./lib main.c -lx, gcc将在目前目錄的lib子目錄下搜尋x庫檔案。
使用gcc -c和ar 建立自己的靜态庫:
假設有兩個源檔案,分别為add.c 和 sub.c,一個頭檔案為lib.h
使用gcc -c編譯産生目标檔案,add.o 和 sub.o, gcc -c add.c sub.c
使用ar建立歸檔檔案,并将目标檔案添加進去, ar -crv libmath.a add.o sub.o
使用nm指令可以檢視目标檔案,函數庫或者可執行檔案裡包含的函數,例如:
nm libmath.a nm add.o nm main