MSVC与CRT默认库链接冲突问题
来源:互联网 发布:淘宝新手怎么开店 编辑:程序博客网 时间:2024/05/17 04:43
到个人博客阅读 »
MFC程序在将MFC的使用方式从<在共享 DLL 中使用 MFC>切换到<在静态库中使用 MFC>,构建时,经常出现如下所示的lib库冲突问题。
>nafxcwd.lib(afxmem.obj) : error LNK2005: “void * __cdecl operator new(unsigned int)” (??2@YAPAXI@Z) 已经在 LIBCMTD.lib(new.obj) 中定义
>nafxcwd.lib(afxmem.obj) : error LNK2005: “void __cdecl operator delete(void *)” (??3@YAXPAX@Z) 已经在 LIBCMTD.lib(dbgdel.obj) 中定义
……
>MSVCRTD.lib(MSVCR90D.dll) : error LNK2005: _sprintf 已经在 libcmtd.lib(sprintf.obj) 中定义
>MSVCRTD.lib(MSVCR90D.dll) : error LNK2005: _strncmp 已经在 LIBCMTD.lib(strncmp.obj) 中定义
……
>LINK : warning LNK4098: 默认库“MSVCRTD”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
>F:\…\RtspClient.exe : fatal error LNK1169: 找到一个或多个多重定义的符号
今天又碰到这个问题了,于是写下来。
这个问题是在修改主程序“MFC的使用方式”的时候发生的,主程序引用了其他几个lib库。lib库的配置是<静态库(.lib)>、<使用标准 Windows 库>、代码生成使用的运行库是<多线程调试 DLL (/MDd)>,主程序修改后的配置是<应用程序(.exe)>、<在静态库中使用 MFC>、代码生成使用的运行库是<多线程调试(/MTd)>。
要解决这个问题,首先要了解MSVCRTD.lib、LIBCMTD.lib干什么用的,还有MSVC与CRT的关系,可以通过这篇文章了解:MSVC与CRT的恩怨情仇。
了解以后,可以采用下面的方法解决问题。
将lib库使用的运行库一致修改为<多线程调试(/MTd)>;
由于VS在编译时是按文件名字母序的顺序,同时按需决定要链接的库文件,这里我们强制修改链接顺序。在 配置属性->连接器->输入 中,忽略特定库:nafxcwd.lib;libcmtd.lib,附加依赖项:nafxcwd.lib libcmtd.lib。
这样,构建成功。
欢迎指正!
- MSVC与CRT默认库链接冲突问题
- MSVC与CRT默认库链接冲突问题
- MSVC与CRT默认库链接冲突问题
- MSVC编译链接问题
- MSVC、Mingw与动态链接库
- VC默认链接库冲突
- glibc与MSVC CRT,crt编译错误及解决
- MSVC CRT运行库启动代码分析
- MSVC 与 CRT 之间的恩怨情仇
- 链接 CRT 库和 MFC 库 链接顺序问题
- 如何与正确的 C 运行时 (CRT) 库链接
- 用mingw链接msvc生成的库时,无定义chkstk问题的解决
- 静态链接,静态链接库,CRT
- 链接装载与库《程序员的自我修养》 之 全局符号冲突问题
- MSVC链接参数
- MSVC的编译链接
- 运行库:Windows下MSVC CRT运行库封装fread()函数解析
- MSVC與CRT的恩怨情仇
- Ubuntu中将otf字体转换为ttf字体
- 添加通讯录类之间的调用
- Oracle 10g OCP 042 题库 31-70 题 共168题
- 数据结构-图-as3实现-有向图 图存储(邻接矩阵),广度深度遍历
- glaux.pas及glaux.dll
- MSVC与CRT默认库链接冲突问题
- [wp7软件]wp7~~各种外语学习软件~~集合贴~~
- 标记控制数据
- Oracle 10g OCP 042 题库 71-120 题 共168题
- Oracle 10g OCP 042 题库 121-166题 共168题
- 想成为Google工程师?先回答这15个面试问题
- Oracle中如何插入特殊字符:& 和 ' (多种解决方案)
- 设计模式学习笔记:开篇
- (转)imagemagick + tesseract-ocr