静态链接库与动态链接库 (二)动态链接库的编译与使用
上一篇文章里大概描述linux下靜態(tài)鏈接庫的編譯與使用,下面講動(dòng)態(tài)鏈接庫的編譯與使用方法。
1. 什么是動(dòng)態(tài)鏈接庫
??? 所謂動(dòng)態(tài)鏈接庫,是指編譯的時(shí)候不會(huì)把程序引用到的庫插入到執(zhí)行程序里,而是在執(zhí)行時(shí)候才會(huì)去加載相關(guān)的庫,所有用到此庫的程序可以共享一份代碼。
??? 這樣帶來的好處是可執(zhí)行程序所占的空間變小了,同時(shí),如果庫需要升級(jí),你并不需要重新編譯你的程序,只要把相關(guān)的庫升級(jí)即可。
2. 動(dòng)態(tài)鏈接庫的編譯與使用方法
??? 使用和上一篇文章相同的代碼:main.c? sum.c? sum.h??
??? 在 linux 下動(dòng)態(tài)鏈接庫文件一般是這樣的名字: libxxx.so
復(fù)制代碼lv@lenovo: $ ls main.c sum.c sum.h lv@lenovo: $ lv@lenovo: $ gcc -c -fPIC sum.c ## -fIPC告訴編譯器將源代碼編譯成共享的object文件,PIC(Position-Independent Code)意思是非位置依賴性代碼 lv@lenovo: $ ls main.c sum.c sum.h sum.o lv@lenovo: $ gcc -shared -fPIC -o libsum.so sum.o ## 生成動(dòng)態(tài)鏈接庫文件libsum.so lv@lenovo: $ ls libsum.so main.c sum.c sum.h sum.o lv@lenovo: $ lv@lenovo: $ gcc -o sumappd main.c -L . -lsum ## 生成可執(zhí)行程序 lv@lenovo: $ ls libsum.so sum.c sum.o main.c sum.h sumappd lv@lenovo: $ ./sumappd ## 運(yùn)行生成結(jié)果 Num1 + Num2 = 3
????? 結(jié)論: 編譯時(shí)”-lsum“的方式,是不能夠區(qū)分當(dāng)前是靜態(tài)鏈接還是動(dòng)態(tài)鏈接的。
???????????????? 如果在同一個(gè)目錄下同時(shí)有靜態(tài)鏈接庫和動(dòng)態(tài)鏈接庫,則系統(tǒng)默認(rèn)會(huì)引用動(dòng)態(tài)鏈接庫,如果想使用靜態(tài)鏈接庫則需要在編譯時(shí)加上”-static“參數(shù)。
???
???? (注:若使用C++編寫,編譯的時(shí)候?qū)?gcc 改用 g++ 即可)
轉(zhuǎn)載于:https://www.cnblogs.com/lvchaoshun/p/5966788.html
總結(jié)
以上是生活随笔為你收集整理的静态链接库与动态链接库 (二)动态链接库的编译与使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “天色亦黄昏”下一句是什么
- 下一篇: 求成都成都歌词