靜態庫文件,須要在連接過程當中和主程序連接在一塊兒,若是你想改變某個部分的功能,或者發佈不一樣版本,就須要修改這個代碼並所有從新編譯,須要作不少的重複操做,所以引入動態庫的概念,動態庫不須要在編譯時連接,更容易改變。git
和靜態庫同樣,建立靜態庫須要.o文件github
gcc -I./includes -fPIC -c hfcal.c -o hfcal.o
-fPIC表示建立位置無關代碼,如今大部分的操做系統都不須要輸入這一命令。 -I指定頭文件位置 -c表示只編譯,-o表示目標文件路徑和名稱位置無關代碼,就是不管計算機把它加載到存儲器的哪一個位置,均可以運行的代碼。操作系統
gcc -shared hfcal.o -o ./libs/libhfcal.so
Mac OS X下:gcc -shared hfcal.o -o ./libs/libhfcal.dylib
在Linux和Unix上,動態庫被叫作共享目標文件,在Mac OS X上,叫作動態庫,在Windows上叫做動態連接庫。 靜態庫使用ar命令生成的,而動態庫要用gcc。gcc elliptical.o -I./includes -L./libs -lhfcal -o elliptical
雖然命令同樣,可是gcc作的事卻不盡相同,使用靜態庫時,gcc會把靜態庫和主程序目標文件通通縫合在一塊兒,可是使用動態庫時,gcc只會在目標可執行文件中插入一段用來查找庫位置的佔位符,在運行時去連接。 這麼看起來動態連接庫這個名字取得棒極了。當咱們的程序應用於不一樣場景,有一個動態庫中的功能再也不適用了,咱們要作的就是,修改這一個動態庫,與其餘文件無關。code