【C语言进阶深度学习记录】十六 静态库与动态库的创建与使用
生活随笔
收集整理的這篇文章主要介紹了
【C语言进阶深度学习记录】十六 静态库与动态库的创建与使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
上一篇文章學習了編譯的過程,點擊鏈接查看:【C語言進階深度學習記錄】十五 編譯過程簡介,每一個C源文件編譯后將會生成目標文件,那么這些目標文件,還需要鏈接起來,生成可執行文件。
文章目錄
- 1 鏈接的意義
- 1.1 靜態鏈接
- 1.11 Linux下靜態庫的創建和使用
- 1.12 靜態庫創建使用代碼案例分析
- 1.2 動態鏈接
- 1.21 Linux下動態庫的創建和使用
- 1.22 動態庫創建使用代碼案例分析
- 2 總結
1 鏈接的意義
鏈接的主要作用就是把各個模塊之間的相互引用的部分處理好,使得各個模塊之間能夠正確的銜接。像下圖這樣:
1.1 靜態鏈接
- 由鏈接器在鏈接時將 庫 直接加入到可執行程序中。像下圖這樣。
1.11 Linux下靜態庫的創建和使用
- 編譯靜態庫源碼:gcc -c lib.c -o lib.o
- 生成靜態庫文件:ar -q lib.a lib.o
- 使用靜態庫編譯:gcc main.c lib.a -o main.out
1.12 靜態庫創建使用代碼案例分析
- 代碼 20-1.c
- 靜態庫源代碼 slib.c
將上述代碼slib.c編譯生成靜態庫:
然后使用生成的slib.a 靜態庫編譯代碼 20-1.c
- gcc 20-1.c slib.a -o 20-1.out
運行生成的可執行文件:
./20-1.out
結果如下:
1.2 動態鏈接
- 可執行程序在運行的時候才加載庫進行鏈接
- 庫的內容不會像靜態鏈接那樣被直接加到可執行文件中
- 所以,動態鏈接節省內存空間
1.21 Linux下動態庫的創建和使用
- 編譯動態庫源碼:gcc -shared dlib.c -o dlib.so
- 使用動態庫編譯:gcc main.c -ldl -o main.out
- 在使用動態庫的時候,在代碼中需要使用一些動態庫的系統調用,關鍵的有以下幾個:
1.22 動態庫創建使用代碼案例分析
- 代碼 20-2-lyy.c
- 動態庫源代碼 dlib.c
首先將上述動態庫源代碼編譯生成動態庫文件:
然后編譯運行20-2-lyy.c源代碼,此代碼在運行的過程中會自己去打開動態庫進行鏈接
運行生成的可執行代碼,結果如下圖:
上述動態庫的創建很簡單,使用的話,就學會使用上述的三個關鍵的系統調用函數即可。
2 總結
- 鏈接是指將多個目標文件連接為最終的可執行文件
- 根據鏈接的方式不同,分為靜態鏈接域動態鏈接:
總結
以上是生活随笔為你收集整理的【C语言进阶深度学习记录】十六 静态库与动态库的创建与使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构行编辑成簇 c语言,索引的数据结
- 下一篇: 梳理百年深度学习发展史-七月在线机器学习