庫檔案,是一堆二進制代碼實作的集合檔案,我們要生成一個庫,就是將一大堆代碼實作打包生成一個庫檔案,其中不能包括main函式,
生成可執行程式鏈接動態庫時,是將動態庫中的函式資訊表記錄到可執行程式中,生成的可執行程式較小,運行時要加載動態庫,不會造成代碼冗余,在gcc編譯器中就默認使用動態鏈接,
生成可執行程式鏈接靜態庫時,是將靜態庫中使用到的代碼全部寫入可執行程式中,生成的可執行程式較大,運行時不需要庫檔案,但卻會造成代碼冗余,
- 生成動態庫
命名方式:以lib作為前綴,以.so作為后綴,中間為名稱
gcc -fPIC -c child.c -o child.o //將原始碼編譯為二進制代碼
gcc -shared child.o -o libchild.so
-fPIC產生位置無關代碼;
-shared告訴編譯器生成的是庫檔案而不是可執行檔案;
- 生成靜態庫
命名方式:以lib作為前綴,以.a作為后綴,中間為名稱
gcc -c child.c -o child_static.o //將原始碼編譯為二進制代碼
ar -cr libchild.a child.o //使用ar工具打包靜態庫
動態庫和靜態庫的使用分為:生成可執行程式時鏈接使用、運行可執行程式時加載使用(僅針對動態庫)
-
生成可執行程式時鏈接使用
使用gcc編譯器,在生成可執行程式時,使用-l選項指定要鏈接的庫檔案名稱,
gcc編譯器會默認去以下路徑尋找庫檔案:
1 .將庫檔案放在默認指定的路徑下 /lib64
2 .環境變數LIBRARY_PATH保存默認查找路徑,將庫檔案所在路徑添加到環境變數中:
export LIBRARY_PATH=${LIBRARY_PATH}:.
3 .使用gcc編譯選項-L指定庫檔案所在路徑:
gcc main.c -o main -l child -L./ -
運行可執行程式時加載使用(僅針對動態庫)
gcc編譯器會默認去以下路徑尋找庫檔案:
1 .將庫檔案放在默認指定的路徑下 /lib64
2 .環境變數LD_LIBRARY_PATH保存默認查找路徑,將庫檔案所在路徑添加到環境變數中,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/267464.html
標籤:其他
上一篇:MongoDB的安裝
