error LNK2005編譯錯誤 EVC

2021-05-22 14:26:07 字數 2596 閱讀 8884

error lnk2005錯誤有很多種,有些跟.h標頭檔案引用順序有關,有些與lib庫的引用順序有關,難以捉摸。最近在做fbreader移植到wince系統就遇到了這兩種情況,故而記之。

問題現象一:重複定義,錯誤提示如下

標頭檔案順序

#include "zlfile.h"

#include "zlzdecompressor.h"

#include "palmdocstream.h"

#include "docdecompressor.h"

#include "huffdecompressor.h"

palmdocstream.obj : error lnk2005: getdllversion already defined in ereaderstream.obj

palmdocstream.obj : error lnk2005: isdlgbuttonchecked already defined in ereaderstream.obj

palmdocstream.obj : error lnk2005: checkdlgbutton already defined in ereaderstream.obj

palmdocstream.obj : warning lnk4006: getdllversion already defined in ereaderstream.obj; second definition ignored

palmdocstream.obj : warning lnk4006: isdlgbuttonchecked already defined in ereaderstream.obj; second definition ignored

palmdocstream.obj : warning lnk4006: checkdlgbutton already defined in ereaderstream.obj; second definition ignored

上面的錯誤真是莫,不知道**呼叫了這些函式。。。。

解決辦法:將#include "zlzdecompressor.h"放在最後面,問題解決

#include "zlfile.h"

#include "palmdocstream.h"

#include "docdecompressor.h"

#include "huffdecompressor.h"

#include "zlzdecompressor.h"

問題現象

二、下面有現象是我以前在將程式從wince5.0 到wince6.0時出現的,因為ce5.0採用mfc動態dll,而ce6.0只能採用static mfc lib庫。

nafxcwd.lib(afxmem.obj) :error lnk2005:"void * __cdecl operator new(unsigned int)"(??2@yapaxi@z) already defined in libcmtd.lib(new.obj) nafxcwd.lib(afxmem.obj) :

error lnk2005:"void __cdecl operator delete(void *)"(??3@yaxpax@z) already defined in libcmtd.lib(dbgnew.obj) nafxcwd.lib(afxmem.obj) :

原因:crt 庫對newdeletedllmain函式使用弱外部鏈結。mfc 庫也包含newdeletedllmain函式。這些函式要求先鏈結 mfc 庫,然後再鏈結 crt 庫。

改善辦法:

2. 將mfc靜態鏈結改為動態鏈結

3.在wince6.0下無法支援mfc動態鏈結(模擬器除外),不知道微軟體搞什麼,反正在裝置板上就是無法執行帶動態mfc鏈結的應用程式;

這個解釋了微軟體為什麼預設不採用(use mfc in a shared dll)有興趣的可以參考一下。

uafxwce.lib

(afxmem.obj) : error lnk2005: "void __cdecl operator delete(void *)" (??3@yaxpax@z) already defined in

coredll.lib

(coredll.dll)

這是因為mfc庫先於其它庫被鏈結,通過以下辦法改變lib 庫的呼叫順序,可解決該問題:

project -> settings -> link ->catergory(input)  

in ignore libraries

add "uafxwce.lib coredll.lib

" in the object/libraries modules

add "uafxwce.lib coredll.lib

" in the order that is mentioned

error LNK2005怎麼解決

相信大家在寫c語言標頭檔案的時候都遇到過以下的錯誤 如果你沒有遇到過,說明寫的 量還不夠多哦 error 6 error lnk2005 structuretmp already defined in main.obj structure.obj pagereplace error 7 fatal ...

Error LNK2005解決方法

程式設計中經常能遇到lnk2005錯誤 重複定義錯誤,其實lnk2005錯誤並不是乙個很難解決的錯誤。弄清楚它形成的原因,就可以輕鬆解決它了。造成lnk2005錯誤主要有以下幾種情況 1 重複定義全域性變數。可能存在兩種情況 a 對於一些初學程式設計的程式設計師,有時候會以為需要使用全域性變數的地方...

error LNK2005的可能可行解決方案

引言 程式設計時,經常能遇到lnk2005錯誤 重複定義錯誤,但實際上,這不是個很難搞定的問題。下面我將就以下個方面和大家一起 這個錯誤的發生和解決。1.重複定義全域性變數。這類情況一般又分為兩種 a.對於一些初學程式設計的程式設計師 比如說我 有時候會以為在需要使用全域性變數的時候可以使用定義宣告...