Head First C 第八章 靜態庫與動態庫 建立動態庫

Head First C 第八章 靜態庫與動態庫 建立動態庫

動態庫是什麼

靜態庫文件,須要在連接過程當中和主程序連接在一塊兒,若是你想改變某個部分的功能,或者發佈不一樣版本,就須要修改這個代碼並所有從新編譯,須要作不少的重複操做,所以引入動態庫的概念,動態庫不須要在編譯時連接,更容易改變。git

動態庫的建立

靜態庫同樣,建立靜態庫須要.o文件github

  1. 建立.o文件 gcc -I./includes -fPIC -c hfcal.c -o hfcal.o -fPIC表示建立位置無關代碼,如今大部分的操做系統都不須要輸入這一命令。 -I指定頭文件位置 -c表示只編譯,-o表示目標文件路徑和名稱

位置無關代碼,就是不管計算機把它加載到存儲器的哪一個位置,均可以運行的代碼。操作系統

  1. 建立動態庫 Linux下: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。

如何使用動態庫

  1. 咱們有了主程序代碼的目標文件(.o),咱們能夠使用和靜態庫同樣的方式來編譯主程序。 gcc elliptical.o -I./includes -L./libs -lhfcal -o elliptical 雖然命令同樣,可是gcc作的事卻不盡相同,使用靜態庫時,gcc會把靜態庫和主程序目標文件通通縫合在一塊兒,可是使用動態庫時,gcc只會在目標可執行文件中插入一段用來查找庫位置的佔位符,在運行時去連接。 這麼看起來動態連接庫這個名字取得棒極了。
  2. 不一樣系統下動態庫的使用 在Mac OS X 下,編譯程序時,會把動態庫的路徑保存在可執行文件中,程序運行時知道從哪裏去找這個動態庫。 在Windows中,會如今當前目錄下查找,若是沒找到,就會去找保存在PATH中的目錄。 但在Linux和大部分Unix中不同,系統只會從環境變量LD_LIBRARY_PATH中查找動態庫,咱們有兩種方法能夠解決這個問題:
    1. 把咱們的動態庫拷貝到系統動態庫目錄下usr/local/lib
    2. LD_LIBRARY_PATH中添加咱們的當前目錄

修改程序的動態庫

當咱們的程序應用於不一樣場景,有一個動態庫中的功能再也不適用了,咱們要作的就是,修改這一個動態庫,與其餘文件無關。code

代碼

dynamic library sampleip

相關文章
相關標籤/搜索