【C語(yǔ)言】動(dòng)態(tài)編譯&靜態(tài)編譯

這一期我們來了解一些什么是靜態(tài)編譯,什么又是動(dòng)態(tài)鏈接庫(kù)。
廢話不多說讓我們繼續(xù)吧!
先說說動(dòng)態(tài)編譯

理論知識(shí):
1.??? 動(dòng)態(tài)編譯: 動(dòng)態(tài)編譯的可執(zhí)行文件需要附帶一個(gè)的動(dòng)態(tài)鏈接庫(kù),在執(zhí)行時(shí),需要調(diào)用其對(duì)應(yīng)動(dòng)態(tài)鏈接庫(kù)中的命令。所以其優(yōu)點(diǎn)一
方面是縮小了執(zhí)行文件本身的體積,另一方面是加快了編譯速度,節(jié)省了系統(tǒng)資源。缺點(diǎn)一是哪怕是很簡(jiǎn)單的程序,只用到了鏈接
庫(kù)中的一兩條命令,也需要附帶一個(gè)相對(duì)龐大的鏈接庫(kù);二是如果其他計(jì)算機(jī)上沒有安裝對(duì)應(yīng)的運(yùn)行庫(kù),則用動(dòng)態(tài)編譯的可執(zhí)行文
件就不能運(yùn)行。
解釋:
動(dòng)態(tài)lib相當(dāng)于一個(gè)h文件,是對(duì)實(shí)現(xiàn)部分(.dll文件)的導(dǎo)出部分的聲明。編譯后只是將導(dǎo)出聲明部分編譯到宿主程序中,運(yùn)行時(shí)
候需要相應(yīng)的dll文件支持。
舉例:(缺少dll文件)
當(dāng)編譯好的程序放到其他計(jì)算機(jī)上運(yùn)行可能會(huì)提示:”找不到xxx.dll文件”

這就是因?yàn)橛?jì)算機(jī)沒有安裝對(duì)應(yīng)的VC++運(yùn)行庫(kù)所導(dǎo)致的,解決辦法就是去下載對(duì)應(yīng)的運(yùn)行庫(kù)并安裝上。
靜態(tài)編譯

理論知識(shí):
2.靜態(tài)編譯:編譯器在編譯可執(zhí)行文件時(shí),把需要用到的對(duì)應(yīng)動(dòng)態(tài)鏈接庫(kù)(.so或.ilb)中的部分提取出來,鏈接到可執(zhí)行文件中去,
使可執(zhí)行文件在運(yùn)行時(shí)不需要依賴于動(dòng)態(tài)鏈接庫(kù).
解釋:
靜態(tài)lib將導(dǎo)出聲明和實(shí)現(xiàn)都放在lib中。編譯后所有代碼都嵌入到宿主程序,當(dāng)程序運(yùn)行時(shí)就不再需要任何的dll文件,但這無疑會(huì)增加可執(zhí)行文件的體積
舉例:(vs2010實(shí)現(xiàn)靜態(tài)編譯)
1、項(xiàng)目->(鼠標(biāo)右鍵,選擇屬性)配置屬性->常規(guī)->MFC的使用:在靜態(tài)庫(kù)中使用MFC

2、項(xiàng)目 -> 配置屬性->C/C++->代碼生成->運(yùn)行庫(kù) :選擇 多線程調(diào)試(/MTd)。


本期專欄到此結(jié)束,個(gè)位小伙伴都有沒有g(shù)et到新知識(shí)呢?
歡迎評(píng)論區(qū)留言,記得收藏\點(diǎn)贊\關(guān)注\然后分享給需要的更多人哦