久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

VC6的LNK2005錯(cuò)誤

 MikeDoc 2010-12-24
  使用VC編程中經(jīng)常能遇到LNK2005錯(cuò)誤——重復(fù)定義錯(cuò)誤,其實(shí)LNK2005錯(cuò)誤并不是一個(gè)很難解決的錯(cuò)誤,。弄清楚它形成的原因,,就可以輕松解決它了。

出現(xiàn)LNK2005錯(cuò)誤有多種原因:
1.重復(fù)定義全局變量,。
2.頭文件的包含重復(fù)。
3.使用第三方的庫造成的,。

這里只討論使用第三方的庫造成的原因的處理,。如果在程序中同時(shí)使用了多個(gè)函數(shù)庫,,并且這些函數(shù)庫中有些函數(shù)名稱有沖突,,就會(huì)引起LNK2005錯(cuò)誤,。微軟 提供了兩套C運(yùn)行期函數(shù)庫,,一種是普通的函數(shù)庫:LIBC.LIB,,不支持多線程,。另外一種是支持多線程的:msvcrt.lib,。如果一個(gè)工程里,,這兩 種函數(shù)庫混合使用,,可能會(huì)引起這個(gè)LNK2005錯(cuò)誤,,一般情況下它需要MFC的庫先于普通運(yùn)行期函數(shù)庫被連接,,因此建議使用支持多線程的 msvcrt.lib,。
通常是盡量避免這樣混合使用兩套函數(shù)庫(LIBC.lib和MSVCRT.lib),。如果不得不同時(shí)使用兩套函數(shù)庫或者其它相互有沖突的函數(shù)庫,,可以嘗試按下面所說的方法:

在編譯包含zlib庫文件的時(shí)候,出現(xiàn)以下錯(cuò)誤:
Linking...
MSVCRT.lib(MSVCRT.dll) : error LNK2005: _malloc already defined in LIBCD.lib(dbgheap.obj)
MSVCRT.lib(MSVCRT.dll) : error LNK2005: _sprintf already defined in LIBCD.lib(sprintf.obj)
MSVCRT.lib(MSVCRT.dll) : error LNK2005: _fclose already defined in LIBCD.lib(fclose.obj)
MSVCRT.lib(MSVCRT.dll) : error LNK2005: _free already defined in LIBCD.lib(dbgheap.obj)
MSVCRT.lib(MSVCRT.dll) : error LNK2005: __vsnprintf already defined in LIBCD.lib(vsnprint.obj)
MSVCRT.lib(MSVCRT.dll) : error LNK2005: _fflush already defined in LIBCD.lib(fflush.obj)
LINK : warning LNK4098: defaultlib "MSVCRT" conflicts with use of other libs; use /NODEFAULTLIB:library
Debug/Test.exe : fatal error LNK1169: one or more multiply defined symbols found

產(chǎn)生的原因是一個(gè)函數(shù)在兩個(gè)不同的Lib中都有導(dǎo)出(MSVCRTD和LIBC有沖突),有兩種辦法處理:
方法一: MSDN對(duì)此的解決方法是增加[/FORCE:MULTIPLE]連接選項(xiàng). 這方式發(fā)現(xiàn)會(huì)有警告,但可以編譯通過:
LINK : warning LNK4075: ignoring /INCREMENTAL due to /FORCE specification
MSVCRT.lib(MSVCRT.dll) : warning LNK4006: _malloc already defined in LIBCD.lib(dbgheap.obj); second definition ignored
MSVCRT.lib(MSVCRT.dll) : warning LNK4006: _sprintf already defined in LIBCD.lib(sprintf.obj); second definition ignored
MSVCRT.lib(MSVCRT.dll) : warning LNK4006: _fclose already defined in LIBCD.lib(fclose.obj); second definition ignored
MSVCRT.lib(MSVCRT.dll) : warning LNK4006: _free already defined in LIBCD.lib(dbgheap.obj); second definition ignored
MSVCRT.lib(MSVCRT.dll) : warning LNK4006: __vsnprintf already defined in LIBCD.lib(vsnprint.obj); second definition ignored
MSVCRT.lib(MSVCRT.dll) : warning LNK4006: _fflush already defined in LIBCD.lib(fflush.obj); second definition ignored
LINK : warning LNK4098: defaultlib "MSVCRT" conflicts with use of other libs; use /NODEFAULTLIB:library


方法二:添加鏈接選項(xiàng):/NODEFAULTLIB:<library> 如:/nodefaultlib:"libcd.lib"  該方法能編譯通過,,并且沒有警告

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多