1、在Linux下,動態(tài)庫和靜態(tài)庫同事存在時(shí),gcc/g++的鏈接程序,默認(rèn)鏈接的動態(tài)庫。
可以使用下面的方法,給連接器傳遞參數(shù),看是否鏈接動態(tài)庫還是靜態(tài)庫。
-WI,-Bstatic -llibname //指定讓gcc/g++鏈接靜態(tài)庫
使用:
gcc/g++ test.c -o test -WI,-Bstatic -llibname
-WI,-Bdynamic -llibname //指定讓gcc/g++鏈接動態(tài)庫
使用:
gcc/g++ test.c -o test -WI,-Bdynamic -llibname
如果要完全靜態(tài)加在,使用-static參數(shù),即將所有的庫以靜態(tài)的方式鏈入可執(zhí)行程序,這樣生成的可執(zhí)行程序,不再依賴任何庫,同事出現(xiàn)的問題是,這樣編譯出來的程序非常大,占用空間。
2、Linux下動態(tài)庫為什么會出現(xiàn)編譯OK,運(yùn)行時(shí)找不到的情況。
原因是:
linux下鏈接器默認(rèn)是不記錄庫的搜索路徑的,只記錄名字,所以才會有編譯時(shí)OK,但運(yùn)行時(shí),找不到的情況。
解決方法:
想在程序中記錄路徑,可以使用-WI,-rlibpath指定動態(tài)庫的搜索路徑。
使用方法。
gcc/g++ test.c -o test -WI,rlibpath -llibname
3、關(guān)于Linux下庫的更多問題,可以參看:
自己的博客: http://blog.163.com/xychenbaihu@yeah/blog/static/13222965520101023104745738/
http://xiaobin.net/200911/analytics-on-unix-static-and-dynamic-library/