首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅在发布版本中就存在大量的链接器问题

仅在发布版本中就存在大量的链接器问题
EN

Stack Overflow用户
提问于 2010-02-14 08:36:31
回答 3查看 4.4K关注 0票数 3

有谁知道这件事吗?链接器错误不是我所熟悉的,尤其是像这样的错误。

还有其他我应该包括的信息吗?

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-02-14 08:38:28

您似乎正在链接使用不同CRT库设置构建的项目,一个使用多线程,另一个使用多线程调试。调整所有项目的设置以使用相同风格的库,这样问题就会消失!

票数 8
EN

Stack Overflow用户

发布于 2010-02-14 08:48:11

您通常不会尝试在发布版本中引入LIBCMTD,它是LIBCMT的调试版。

看起来你的发布版本正试图链接到某个调试过的东西。您的构建中可能有一个损坏的依赖项(或者,如果您的项目通常是分片构建的,那么您可能错过了手动重新构建要发布的内容)。

看起来很可能是freeglut_static.lib没有为零售而重建。如果不是,那么试着删除你所有的构建产品(*.obj,*.lib,*.pch,*.pdb),当然要小心不要删除你没有生成的东西-第三方库,等等。然后构建就发布。

票数 2
EN

Stack Overflow用户

发布于 2010-02-15 21:02:33

补充一下其他备注:不要在发布版本中使用“编辑并继续”/EDITANDCONTINUE。这在调试时是一个很有用的特性,因为它可以减少重建时间。但它是通过将可执行文件打包成非优化的形式来实现的。

您会收到警告,因为/OPT:ICF选项将折叠相同的函数体。这意味着两个函数共享相同的地址。显然,这意味着你不能只编辑和替换其中的一个。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2259697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档