1. 程式人生 > >關於linux靜態庫和動態庫知識

關於linux靜態庫和動態庫知識

比如ar cr libmain.a main.cpp main.h,那麼ar -t libmain.a就會發現,其實libmain.a裡面就是main.cpp,main.h而已。所以用ar打包時,只有打包.o檔案是有用的,如果你希望把其他的lib打包進來,比如想打包libseg.a,使用 ar cr libmain.a main.o libseg.a,那你會發現,libmain.a裡面就真的包含了libseg.a,而gcc解壓識別的時候,是不會深入到libseg.a裡面去載入它裡面的.o檔案的符號表的。

1、當靜態庫依賴靜態庫時,你可以把所以靜態庫都先解壓,然後把所以.o都打包在一起,或者在編譯程式的時候,加入依賴的靜態庫。

2、當靜態庫依賴動態庫時,同理,由上面可知,由於靜態庫是沒有連結過程的,只是打包,所以編譯的時候也不需要加入動態庫,在最後生成bin的時候加入動態庫連結就行。

3、當動態庫依賴動態庫時,由於動態庫是知道它依賴的動態庫,是執行時載入的,所以不需要打包進動態庫,在編譯bin的時候連結,執行時候載入就行。

4、當動態庫依賴靜態庫時,由於動態庫是會編譯以及連結的,所以我們需要加入靜態庫的依賴;當然如果沒有把靜態庫連結進來,在編譯最後bin的時候加入靜態庫依賴也是ok的。