MFC Toolbox Library.lib(SimpleFileIO.obj) : error LNK2005: _wcsnlen already defined in libcmtd.lib(wcslen_s.obj)
fatal error LNK1169: one or more multiply defined symbols found
這讓我發瘋。通常情況下,如果作爲其解決方案一部分的各種項目不同意使用哪種CRT(單線程,多線程,發行版或調試版),則會得到此結果。但是,我現在已經過了大約500次這個事情了,他們都同意。什麼/其他/導致此?
背景:這是VS 2010項目從VS 2008只轉換
MFC工具箱Library.lib設置爲編譯爲靜態庫,使用/ MTD,如.EXE我想目標在此解決方案中編譯。此外,從(VS 2008)轉換而來的解決方案已正確編譯&鏈接!因此,這兩個.vcproj之間並不存在分歧 - 或者至少在轉換之前沒有分歧。另外,另一個解決方案中約25個其他項目使用MFC工具箱庫 - 並且在該解決方案(主版本英語)中,它編譯&針對這些其他項目的鏈接,無需在調試和發佈目標中投訴。
我剛剛花了最後一個小時去了解這個目標項目(Cimex Header Viewer)的每個項目屬性與主構建英語解決方案中的幾個不同的目標exe項目 - 我找不到差異。它們似乎是相同的,除了它們是不同的名稱。
我試過做一個乾淨的&建立所有。我完全沒有想法。
有沒有人有想過還有什麼我可以研究?
我想我已經準備好開始咀嚼玻璃了。 :(
嗯,它說你(或者是微軟?)已經以某種方式在[SimpleFileIO.obj]的wcslen_s中編譯,沒有被丟棄,即在C++級別沒有「內聯」。嘗試右鍵單擊wcsnlen和「定義」。如果它是「內聯」=神祕。 – 2011-01-11 20:49:12
我發現我定義的wcsnlen函數實際上是內聯的。因此,連接器擁有訪問SimpleFileIO.obj內嵌定義,與一個是CRT的一部分衝突。去搞清楚! – Mordachai 2011-01-11 21:21:16