區別:
1、靜態庫在編譯的時候被加載,動態庫在執行的之后被加載
2、加載靜態庫編譯所生成的可執行文件比使用動態庫的方式要大
3、靜態庫以.a為后綴,動態庫以.so為后綴
靜態庫的制作:(以main.c調用add()函數為例)
1.通過gcc -c add.c 生成目標文件 =》add.o
2.通過ar crs -o libadd.a add.o 生成靜態庫 =》libadd.a
3.通過gcc main.c -L. -ladd 鏈接靜態庫編譯,生成可執行文件a.out
4.執行a.out即可
2.通過ar crs -o libadd.a add.o 生成靜態庫 =》libadd.a
3.通過gcc main.c -L. -ladd 鏈接靜態庫編譯,生成可執行文件a.out
4.執行a.out即可
動態庫的制作:
1.通過gcc -c add.c 生成目標文件 =》add.o
2.通過gcc -fPIC -shared -o libmyadd.so add.o 生成動態庫文件 =》libmyadd.so
3.通過gcc main.c -L. -lmyadd 生成可執行文件 =》a.out
4,此時,運行找不到庫文件,我們可以
(1)將libmyadd.so放到/usr/lib或/lib目錄下
(2)通過export LD_LIBRARY_PATH=/home/linux/ych/lib 將庫所在的絕對路徑添加至環境變量中(通過echo $LD_LIBRARY_PATH查看此環境變量的值;通過unset LD_LIBRARY_PATH來刪除此環境變量里的值)
(3)在/etc/ld.so.conf.d/下新建一個sudo vi my.conf文件,在里面寫入庫所在的絕對路徑,保存並執行sudo ldconfig執行配置文件。
1.通過gcc -c add.c 生成目標文件 =》add.o
2.通過gcc -fPIC -shared -o libmyadd.so add.o 生成動態庫文件 =》libmyadd.so
3.通過gcc main.c -L. -lmyadd 生成可執行文件 =》a.out
4,此時,運行找不到庫文件,我們可以
(1)將libmyadd.so放到/usr/lib或/lib目錄下
(2)通過export LD_LIBRARY_PATH=/home/linux/ych/lib 將庫所在的絕對路徑添加至環境變量中(通過echo $LD_LIBRARY_PATH查看此環境變量的值;通過unset LD_LIBRARY_PATH來刪除此環境變量里的值)
(3)在/etc/ld.so.conf.d/下新建一個sudo vi my.conf文件,在里面寫入庫所在的絕對路徑,保存並執行sudo ldconfig執行配置文件。
