關於error LNK2005的解決辦法

2021-08-25 07:21:13 字數 856 閱讀 8366

一位網友看了我的《vc和lua混合開發之vc程式呼叫lua指令碼函式 》,說參考了我做的,封裝成自己的乙個dll 也是先把lua編譯成靜態庫,這個靜態庫我沒改動。在mfc dll中,我編譯的話如果是靜態mfc就會報錯,如果是共享mfc 就不會 請問如何解決啊

報錯資訊如

//1>msvcrt.lib(msvcr100.dll) : error lnk2005: _strchr 已經在 libcmt.lib(strchr.obj) 中定義

//1>msvcrt.lib(msvcr100.dll) : error lnk2005: _fread 已經在 libcmt.lib(fread.obj) 中定義

//1>msvcrt.lib(msvcr100.dll) : error lnk2005: _feof 已經在 libcmt.lib(feoferr.obj) 中定義

我發現這種解決辦法有陷入惡性迴圈的勢頭。我分析了一下,估計是lua工程和呼叫lua庫的工程採用不同的執行時庫的不同造成的,也就是解決這種問題的最好辦法是:保證底層庫和上層呼叫程式所用的執行時庫的一致,就是兩個工程的下圖的選項設定必須一致,如下圖:

當然如果你在mfc的使用選擇"在靜態庫中使用 mfc",同時你又選擇"多執行緒除錯dll (mdd)",編譯器會提示乙個錯誤:

這個提示很具體,就是你要麼新增乙個預處理器_afxdll,要麼關閉/md[d]。當然如果你在mfc的使用選擇"在靜態庫中使用 mfc",同時你又選擇"多執行緒除錯(/mtd)",則啥事都沒有。

總之,我覺得解決這類錯誤,最好的解決辦法是保證底層庫和上層呼叫程式所用的執行時庫的一致,而不是會想忽略什麼特定庫,因為忽略特定庫,既麻煩又可能陷入乙個惡性迴圈(因為你不太清楚究竟該忽略哪些庫,往往忽略這個庫又冒出了其它問題)。

error LNK2005怎麼解決

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

關於error LNK2005的解決辦法

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!一位看了我的 vc和lua混合開發之vc程式呼叫lua指令碼函式 說參考了我做的,封裝成自己的乙個dll 也是先把lua編譯成靜態庫,這個靜態庫我沒改動。在mfc dll中,我編譯的話如果是靜態mfc就會報錯,如果是共享mfc 就不會 請問如何解決...

Error LNK2005解決方法

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