将配置从Debug更改为Release时的链接错误

her*_*ian 10 c++ compiler-errors

您好我有项目在VC++ 2008年该项目在调试模式下编译没有错误,但是当我尝试建立它在释放模式,我得到以下链接erorr.

1>Linking...
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)......
Run Code Online (Sandbox Code Playgroud)

我该怎么办呢?谢谢.

Eri*_*rik 22

您正在混合VS运行时 - 确保项目和链接到的所有库的"项目属性/ C++ /代码生成/运行时库"设置相同.

  • @herzl shemuelian:不,其中一个使用`/ MTd` - 这就是创造对`LIBCMTD`的依赖.您还可以检查是否为发布版本定义了`NDEBUG`和**而不是**`_DEBUG`. (2认同)

Zde*_*lik 7

我遇到了和你一样的问题.这个问题的原因是链接器包含了许多你看不到的库(例如你将包含windows.h,它包括windef.h等等......).而且因为这些文件不是防止书面写的(#ifndef缺失),链接器会尝试#define多次同样的事情 - 问题.

我的解决方案是设置此字段:项目属性 - >链接器 - >输入 - >忽略特定库

到" libcmt.lib "

有了这个,你的链接器也将在发布配置中忽略默认包含的有问题的库,一切都应该工作.. :-)

祝你今天愉快.. :-)

PS如果要避免这些链接器误解,请继续配置项目不在调试或发布配置中,而是在"所有配置"中.此选项位于项目配置的左上角.