error LNK2001類(lèi)錯(cuò)誤

error LNK2001類(lèi)錯(cuò)誤

ID:37911963

大小:41.00 KB

頁(yè)數(shù):7頁(yè)

時(shí)間:2019-06-02

error LNK2001類(lèi)錯(cuò)誤_第1頁(yè)
error LNK2001類(lèi)錯(cuò)誤_第2頁(yè)
error LNK2001類(lèi)錯(cuò)誤_第3頁(yè)
error LNK2001類(lèi)錯(cuò)誤_第4頁(yè)
error LNK2001類(lèi)錯(cuò)誤_第5頁(yè)
資源描述:

《error LNK2001類(lèi)錯(cuò)誤》由會(huì)員上傳分享,免費(fèi)在線(xiàn)閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。

1、學(xué)習(xí)VC++時(shí)經(jīng)常會(huì)遇到鏈接錯(cuò)誤LNK2001學(xué)習(xí)VC++時(shí)經(jīng)常會(huì)遇到鏈接錯(cuò)誤LNK2001,該錯(cuò)誤非常討厭,因?yàn)閷?duì)于編程者來(lái)說(shuō),最好改的錯(cuò)誤莫過(guò)于編譯錯(cuò)誤,而一般說(shuō)來(lái)發(fā)生連接錯(cuò)誤時(shí),編譯都已通過(guò)。產(chǎn)生連接錯(cuò)誤的原因非常多,尤其LNK2001錯(cuò)誤,常常使人不明其所以然。如果不深入地學(xué)習(xí)和理解VC++,要想改正連接錯(cuò)誤LNK2001非常困難。  初學(xué)者在學(xué)習(xí)VC++的過(guò)程中,遇到的LNK2001錯(cuò)誤的錯(cuò)誤消息主要為:  unresolvedexternalsymbol“symbol”(不確定的外部“符號(hào)”)?! ∪绻B接程序不能在所有的庫(kù)和目標(biāo)文件內(nèi)找到所引用的函數(shù)、變量或標(biāo)

2、簽,將產(chǎn)生此錯(cuò)誤消息。一般來(lái)說(shuō),發(fā)生錯(cuò)誤的原因有兩個(gè):一是所引用的函數(shù)、變量不存在、拼寫(xiě)不正確或者使用錯(cuò)誤;其次可能使用了不同版本的連接庫(kù)?! ∫韵率强赡墚a(chǎn)生LNK2001錯(cuò)誤的原因:  一.由于編碼錯(cuò)誤導(dǎo)致的LNK2001?! ?.不相匹配的程序代碼或模塊定義(.DEF)文件能導(dǎo)致LNK2001。例如,如果在C++源文件內(nèi)聲明了一變量“var1”,卻試圖在另一文件內(nèi)以變量“VAR1”訪(fǎng)問(wèn)該變量,將發(fā)生該錯(cuò)誤。  2.如果使用的內(nèi)聯(lián)函數(shù)是在.CPP文件內(nèi)定義的,而不是在頭文件內(nèi)定義將導(dǎo)致LNK2001錯(cuò)誤?! ?.調(diào)用函數(shù)時(shí)如果所用的參數(shù)類(lèi)型同函數(shù)聲明時(shí)的類(lèi)型不符將會(huì)產(chǎn)生L

3、NK2001?! ?.試圖從基類(lèi)的構(gòu)造函數(shù)或析構(gòu)函數(shù)中調(diào)用虛擬函數(shù)時(shí)將會(huì)導(dǎo)致LNK2001?! ?.要注意函數(shù)和變量的可公用性,只有全局變量、函數(shù)是可公用的?! §o態(tài)函數(shù)和靜態(tài)變量具有相同的使用范圍限制。當(dāng)試圖從文件外部訪(fǎng)問(wèn)任何沒(méi)有在該文件內(nèi)聲明的靜態(tài)變量時(shí)將導(dǎo)致編譯錯(cuò)誤或LNK2001?! 『瘮?shù)內(nèi)聲明的變量(局部變量)只能在該函數(shù)的范圍內(nèi)使用。  C++的全局常量只有靜態(tài)連接性能。這不同于C,如果試圖在C++的多個(gè)文件內(nèi)使用全局變量也會(huì)產(chǎn)生LNK2001錯(cuò)誤。一種解決的方法是需要時(shí)在頭文件中加入該常量的初始化代碼,并在.CPP文件中包含該頭文件;另一種方法是使用時(shí)給該變量

4、賦以常數(shù)?! 《捎诰幾g和鏈接的設(shè)置而造成的LNK2001  1.如果編譯時(shí)使用的是/NOD(/NODEFAULTLIB)選項(xiàng),程序所需要的運(yùn)行庫(kù)和MFC庫(kù)在連接時(shí)由編譯器寫(xiě)入目標(biāo)文件模塊,但除非在文件中明確包含這些庫(kù)名,否則這些庫(kù)不會(huì)被鏈接進(jìn)工程文件。在這種情況下使用/NOD將導(dǎo)致錯(cuò)誤LNK2001?! ?.如果沒(méi)有為wWinMainCRTStartup設(shè)定程序入口,在使用Unicode和MFC時(shí)將得到“unresolvedexternalon_WinMain@16”的LNK2001錯(cuò)誤信息?! ?.使用/MD選項(xiàng)編譯時(shí),既然所有的運(yùn)行庫(kù)都被保留在動(dòng)態(tài)鏈接庫(kù)之內(nèi),源文件

5、中對(duì)“func”的引用,在目標(biāo)文件里即對(duì)“__imp__func”的引用。如果試圖使用靜態(tài)庫(kù)LIBC.LIB或LIBCMT.LIB進(jìn)行連接,將在__imp__func上發(fā)生LNK2001;如果不使用/MD選項(xiàng)編譯,在使用MSVCxx.LIB連接時(shí)也會(huì)發(fā)生LNK2001。  4.使用/ML選項(xiàng)編譯時(shí),如用LIBCMT.LIB鏈接會(huì)在_errno上發(fā)生LNK2001?! ?.當(dāng)編譯調(diào)試版的應(yīng)用程序時(shí),如果采用發(fā)行版模態(tài)庫(kù)進(jìn)行連接也會(huì)產(chǎn)生LNK2001;同樣,使用調(diào)試版模態(tài)庫(kù)連接發(fā)行版應(yīng)用程序時(shí)也會(huì)產(chǎn)生相同的問(wèn)題?! ?.不同版本的庫(kù)和編譯器的混合使用也能產(chǎn)生問(wèn)題,因?yàn)樾掳娴膸?kù)里

6、可能包含早先的版本沒(méi)有的符號(hào)和說(shuō)明。  7.在不同的模塊使用內(nèi)聯(lián)和非內(nèi)聯(lián)的編譯選項(xiàng)能夠?qū)е翷NK2001。如果創(chuàng)建C++庫(kù)時(shí)打開(kāi)了函數(shù)內(nèi)聯(lián)(/Ob1或/Ob2),但是在描述該函數(shù)的相應(yīng)頭文件里卻關(guān)閉了函數(shù)內(nèi)聯(lián)(沒(méi)有inline關(guān)鍵字),這時(shí)將得到該錯(cuò)誤信息。為避免該問(wèn)題的發(fā)生,應(yīng)該在相應(yīng)的頭文件中用inline關(guān)鍵字標(biāo)志內(nèi)聯(lián)函數(shù)?! ?.不正確的/SUBSYSTEM或/ENTRY設(shè)置也能導(dǎo)致LNK2001?! ∑鋵?shí),產(chǎn)生LNK2001的原因還有很多,以上的原因只是一部分而已,對(duì)初學(xué)者來(lái)說(shuō)這些就夠理解一陣子了。但是,分析錯(cuò)誤原因的目的是為了避免錯(cuò)誤的發(fā)生。LNK2001錯(cuò)誤雖

7、然比較困難,但是只要注意到了上述問(wèn)題,還是能夠避免和予以解決的。在cpp文件中定義變量intvar1;在其對(duì)應(yīng)的頭文件中如下聲明externintvar1;其它文件想訪(fǎng)問(wèn)var1時(shí)只需將該頭文件包含進(jìn)去就可以了。MFC的使用利用“在共享DLL中使用MFC”選項(xiàng)。鏈接器下:System選項(xiàng)使用:Windows(/SUBSYSTEM:WINDOWS),就能避免很多的鏈接錯(cuò)誤。在VC中除了可以編譯MFC程序外,還可以建立Win32Application,以WinMain為主函數(shù)。你可以在VC中建立Win32Applica

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫(huà)的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶(hù)上傳,版權(quán)歸屬用戶(hù),天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶(hù)請(qǐng)聯(lián)系客服處理。