我們知道庫有靜態庫和動態庫2種。這是因為鏈接時間不同而造成的。如下為它們的差別: 靜態庫是在鏈接階段被鏈接的,鏈接靜態庫就像是我們所用的復制粘貼,它操作的對象是目標代碼,源碼不會發生改變由于靜態庫被鏈接后庫就直接嵌入可執行文件中了,所以生成的可執行文件就不受庫的影響了,即使在別的電腦上運行,程序依然可以成功運行。
有別于靜態庫,動態庫的鏈接是在程序執行的時候被鏈接的。所以,即使程序編譯完,庫仍須保留在系統上,以供程序運行時調用。
———————————————————- 我們在這里比較這2種庫的有利之處和不利之處: 就像復制粘貼會帶來文本的冗余一樣,。靜態庫被鏈接后會帶來系統空間的浪費。一個文件你或許覺得不會浪費,但n個文件鏈接同一個庫,那么該庫也會被覆蓋n份。 動態庫則不會,它只是程序需要的時候就去庫里面找。 但是同時這樣的話動態編譯運行起來來比靜態編譯慢,不過由于時代的進步,這種差別已經不會有很大的影響。故而現在代碼編譯默認為靜態編譯。當然你也可以用-static參數指定鏈接靜態庫。
——————————————————–- 自己編寫一個簡單的動態庫和靜態庫: 一.將test.c和test1.c編譯成靜態鏈接庫.a 1 把test.c和test2.c分別編譯為test.o和test2.o.
2.生成libtest.a
3。為了我們使用靜態文件能找到它,把它放在/usr/lib中 
現在就可以使用我們的靜態庫文件了。 調用方式為gcc test3 -o test3.c -ltest
二.將test.c和test2.c組合成動態鏈接庫test.so 與上面方法類似,調用方法改為: gcc test3 -o test3.c test.so
當然,如果你不想把生成的文件或無權限放在/usr/lib中,你可以把當前路徑放在環境變量LD_LIBRARY_PATH中。
新聞熱點
疑難解答