2010-02-14 55 views
3

任何人都有這個想法?鏈接器錯誤是擺脫我的舵手,特別是像這樣的。發佈版本只有大量鏈接器問題

有沒有更多信息我應該包括?

1>Linking... 
1>freeglut_static.lib(freeglut_window.obj) : warning LNK4075: ignoring '/EDITANDCONTINUE' due to '/OPT:ICF' specification 
1>LIBCMTD.lib(dbgheap.obj) : error LNK2005: __heap_alloc already defined in LIBCMT.lib(malloc.obj) 
1>LIBCMTD.lib(dbgheap.obj) : error LNK2005: __recalloc already defined in LIBCMT.lib(recalloc.obj) 
1>LIBCMTD.lib(dbgheap.obj) : error LNK2005: __msize already defined in LIBCMT.lib(msize.obj) 
1>LIBCMTD.lib(malloc.obj) : error LNK2005: _V6_HeapAlloc already defined in LIBCMT.lib(malloc.obj) 
1>LIBCMTD.lib(dbghook.obj) : error LNK2005: __crt_debugger_hook already defined in LIBCMT.lib(dbghook.obj) 
1>LIBCMTD.lib(sbheap.obj) : error LNK2005: ___sbh_pHeaderDefer already defined in LIBCMT.lib(sbheap.obj) 
1>LIBCMTD.lib(sbheap.obj) : error LNK2005: __get_sbh_threshold already defined in LIBCMT.lib(sbheap.obj) 
1>LIBCMTD.lib(sbheap.obj) : error LNK2005: __set_sbh_threshold already defined in LIBCMT.lib(sbheap.obj) 
1>LIBCMTD.lib(sbheap.obj) : error LNK2005: __set_amblksiz already defined in LIBCMT.lib(sbheap.obj) 
1>LIBCMTD.lib(sbheap.obj) : error LNK2005: __get_amblksiz already defined in LIBCMT.lib(sbheap.obj) 
1>LIBCMTD.lib(sbheap.obj) : error LNK2005: ___sbh_heap_init already defined in LIBCMT.lib(sbheap.obj) 
1>LIBCMTD.lib(sbheap.obj) : error LNK2005: ___sbh_find_block already defined in LIBCMT.lib(sbheap.obj) 
1>LIBCMTD.lib(sbheap.obj) : error LNK2005: ___sbh_free_block already defined in LIBCMT.lib(sbheap.obj) 
1>LIBCMTD.lib(sbheap.obj) : error LNK2005: ___sbh_alloc_block already defined in LIBCMT.lib(sbheap.obj) 
1>LIBCMTD.lib(sbheap.obj) : error LNK2005: ___sbh_alloc_new_region already defined in LIBCMT.lib(sbheap.obj) 
1>LIBCMTD.lib(sbheap.obj) : error LNK2005: ___sbh_alloc_new_group already defined in LIBCMT.lib(sbheap.obj) 
1>LIBCMTD.lib(sbheap.obj) : error LNK2005: ___sbh_resize_block already defined in LIBCMT.lib(sbheap.obj) 
1>LIBCMTD.lib(sbheap.obj) : error LNK2005: ___sbh_heapmin already defined in LIBCMT.lib(sbheap.obj) 
1>LIBCMTD.lib(sbheap.obj) : error LNK2005: ___sbh_heap_check already defined in LIBCMT.lib(sbheap.obj) 
1>LIBCMTD.lib(isctype.obj) : error LNK2005: __isctype_l already defined in LIBCMT.lib(isctype.obj) 
1>LIBCMTD.lib(isctype.obj) : error LNK2005: __isctype already defined in LIBCMT.lib(isctype.obj) 
1>LINK : warning LNK4098: defaultlib 'LIBCMTD' conflicts with use of other libs; use /NODEFAULTLIB:library 

回答

8

你似乎是連接不同的CRT庫的設置,一個多線程,另外一個多線程調試建項目。調整設置所有項目使用庫的風格非常相似,問題應該消失!

2

您通常不會嘗試在發佈版本中使用LIBCMTD,它是LIBCMT的調試版本。

看來你的發佈版本試圖鏈接到構建調試的東西。您的內部版本可能有一個錯誤的依賴關係(或者如果您的項目通常是分段構建的,那麼您錯過了重建手動釋放的內容)。

它似乎可能是freeglut_static.lib沒有重建零售。如果不是這樣,那麼嘗試刪除全部你的構建產品(* .obj,* .lib,* .pch,* .pdb)當然要小心而不是刪除你不生產的東西 - 第三方庫等,然後構建只需發佈。

0

要添加到其他備註:請勿在發佈版本中使用「編輯並繼續」/EDITANDCONTINUE。這在調試時非常有用,因爲它可以減少重建時間。但它是通過將您的可執行文件打包爲非優化形式來實現的。

您會收到警告,因爲/ OPT:ICF選項會摺疊相同的函數體。這意味着兩個功能共享相同的地址。顯然這意味着你不能編輯&只能替換其中的一個。