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