第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

c++中的dll問題

c++中的dll問題

C++
練習(xí)冊 2016-06-17 16:53:21
有沒有好的書籍介紹c++中的一些編譯鏈接還有dll庫等的問題?
查看完整描述

2 回答

已采納
?
tanhouyusheng

TA貢獻(xiàn)94條經(jīng)驗(yàn) 獲得超59個(gè)贊

VC++動態(tài)鏈接庫(DLL)編程

查看完整回答
反對 回復(fù) 2016-06-17
?
SapereAudor

TA貢獻(xiàn)22條經(jīng)驗(yàn) 獲得超11個(gè)贊

這個(gè)問題不是一兩句話可以解釋完

1、微軟提供給我們的MFC已經(jīng)編譯成靜態(tài)LIB和動態(tài)LIB,同時(shí),為方便調(diào)試,微軟將MFC源碼(CPP文件)也放到VC里一起發(fā)布了;這里會存在兩種情況,如果是靜態(tài)LIB,那么功能代碼會在鏈接時(shí)鏈接進(jìn)你的EXE文件中,所以這種靜態(tài)LIB方式時(shí),EXE文件通常都比較大;如果是動態(tài)LIB的方式,那么運(yùn)行的時(shí)候就需要mfcxxx.dll文件,但EXE文件體積比較小

2、如果你理解了1,我再進(jìn)一步解釋,MFC工程配置的時(shí)候默認(rèn)會鏈接mfcxxx.lib的,所以你的工程里只需要包含對應(yīng)的頭文件,例如 afxxxx.h之類的文件即可,編譯器在編譯階段是不需要知道具體實(shí)現(xiàn)代碼在哪里的,它只需要知道聲明即可編譯通過,同時(shí)編譯器會將那些外部的函數(shù)(即不是在當(dāng)前CPP文件實(shí)現(xiàn)的函數(shù))標(biāo)記為需要修復(fù)的(我們先把它叫做修復(fù)吧);那么,假如我用了一個(gè)MFC的函數(shù),現(xiàn)在我只有聲明,它是怎么找到具體的實(shí)現(xiàn)代碼呢,這就是鏈接器的工作了,剛才我說過,MFC工程默認(rèn)是會鏈接mfcxxx.lib的,所以鏈接器在工作的時(shí)候,它會遍歷所有編譯過的文件,從里面找出要修復(fù)的項(xiàng),然后再遍歷LIB文件,如果在LIB文件里找到對應(yīng)的實(shí)現(xiàn),那么鏈接器會把編譯階段留下的手尾FIX掉

3、如果你理解了2,我們再進(jìn)一步解釋2;鏈接器鏈接LIB的時(shí)候,會有兩種情況,第一種,這個(gè)LIB本身是一個(gè)靜態(tài)LIB,包含了具體的實(shí)現(xiàn);第二種,這個(gè)LIB本身只是一個(gè)中介,它是指向DLL的某個(gè)函數(shù)的;對于第一種情況,鏈接器會把用到的所有代碼鏈接進(jìn)去,注意,在Release版本情況下,鏈接器只會把用的的函數(shù)鏈進(jìn)去,就是說,即使你的靜態(tài)LIB有10MB,你也不需要擔(dān)心編譯出來的EXE有10MB,它只會把用到的函數(shù)鏈進(jìn)去;;對于第二種,是指向DLL某個(gè)函數(shù)的,鏈接器會在EXE的PE部里的導(dǎo)入表部分,增加一個(gè)項(xiàng),這個(gè)項(xiàng)指向DLL的函數(shù),同時(shí)在修復(fù)編譯階段留下手尾的地方,讓它JMP(跳轉(zhuǎn))或CALL(調(diào)用)到我們DLL函數(shù)里

以上純屬個(gè)人解釋,因?yàn)樵诰幾g鏈接階段是非常復(fù)雜的,一時(shí)間沒辦法完全解決齊,有問題可以繼續(xù)追問

查看完整回答
反對 回復(fù) 2016-06-23
  • 2 回答
  • 3 關(guān)注
  • 1502 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號