日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言学习笔记--动态库和静态库的使用

發(fā)布時間:2025/4/5 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言学习笔记--动态库和静态库的使用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

link

1.C語言中的鏈接器

(1)每個 C 語言源文件被編譯后生成目標(biāo)文件,這些目標(biāo)文件最終要被鏈接在一起生成可執(zhí)行文件。
(2)鏈接器的主要作用是把各個模塊之間相互引用的部分處理好,使得各個模塊之間能夠正確的銜接。

2.靜態(tài)鏈接

由鏈接器在鏈接時將庫的內(nèi)容直接加入到可執(zhí)行程序中


①編譯靜態(tài)庫源碼:gcc –c lib.c –o lib.o

②生成靜態(tài)庫文件:ar –q lib.a lib.o //將 lib.o 與其他文件打包到 lib.a 中

③使用靜態(tài)庫編譯:gcc main.c lib.a –o main.out

3.動態(tài)鏈接
可執(zhí)行程序在運行時才動態(tài)加載庫進行鏈接 ,庫的內(nèi)容不會進入可執(zhí)行程序當(dāng)中

①編譯動態(tài)庫源碼:gcc –shared dlib.c –o dlib.so

②使用動態(tài)庫編譯:gcc main.c -ldl –o main.out

4.dlopen、dlsym、dlclose使用動態(tài)庫
為了使程序方便擴展,具備通用性,可以采用插件形式。采用異步事件驅(qū)動模型,保證主程序邏輯不變,將各個業(yè)務(wù)已動態(tài)鏈接庫的形式加載進來,這就是所謂的插件。linux提供了加載和處理動態(tài)鏈接庫的系統(tǒng)調(diào)用,非常方便。

①打開動態(tài)庫:dlopen

②查找動態(tài)庫中的函數(shù)并返回調(diào)用地址:dlsym

③關(guān)閉動態(tài)庫:dlclose

dlib.c 庫

char* name() {return "Dynamic Lib"; } int add(int a, int b) {return a + b; }

test.c

#include <stdio.h> #include <dlfcn.h> int main() {//打開(加載)動態(tài)庫void* pdlib = dlopen("./dlib.so", RTLD_LAZY);char* (*pname)();int (*padd)(int, int);if( pdlib != NULL ){//查找函數(shù)地址pname = dlsym(pdlib, "name");padd = dlsym(pdlib, "add");if( (pname != NULL) && (padd != NULL) ){printf("Name: %s\n", pname());printf("Result: %d\n", padd(2, 3));}//關(guān)閉動態(tài)庫dlclose(pdlib);}else{printf("Cannot open lib ...\n");}return 0; } gcc -shared dlib.c -o dlib.so gcc test.c -o test.o -ldl 《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的C语言学习笔记--动态库和静态库的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。