VC中缺省库冲突的解决
来源:互联网 发布:北京周末好去处 知乎 编辑:程序博客网 时间:2024/05/19 22:02
http://blog.csdn.net/fmddlmyy/article/details/367333
VC在编译程序时有两个习惯:
1、在从头开始编译时(即生成makefile时),将源文件名按字母排序后,依次处理;
2、一边编译一边决定需要哪些缺省库。 它的这些习惯有时会造成奇怪的编译错误,例如项目中有两个文件:
charutil.c
gbuni.cpp
其中gbnni.cpp用到了MFC库。
编译器先处理charutil.c,然后觉得需要link一个C Runtime库,根据项目设置选择了LIBCMTD.lib。
然后又处理gbnni.cpp,因为要用MFC,又决定要link nafxcwd.lib。
最后link的时候,就会出现以下冲突:
nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in LIBCMTD.lib(dbgdel.obj)
其实,如果先link nafxcwd.lib,再link LIBCMTD.lib,就不会产生冲突。
解决这类问题有两个办法。
1、将需要link C Runtime库的文件(charutil.c)的名字改大一些,让它排在后面。
2、在settings->link->input的Objects/library modules中设置nafxcwd.lib LIBCMTD.lib,即指定库的顺序。也可以顺利编译。
总结一下:在发生缺省库冲突时,可以通过手工设置缺省库的顺序来解决,正确的顺序应该是:
MFC库、CRT动态链接版本的导入库、CRT静态库。
CRT是C RunTime库的缩写。
关于link过程更详细的介绍可以参见http://blog.csdn.net/soloist/archive/2005/09/30/493238.aspx,我从这篇文章中受益良多,感谢作者soloist。
- VC中缺省库冲突的解决
- VC中缺省库冲突的解决
- VC中缺省库冲突的解决 - fmddlmyy的专栏 - CSDNBlog
- VC++6.0和office2007的冲突解决
- VC缺省链接库的顺序不对导致链接错误
- SVN中冲突的解决
- SVN中冲突的解决
- svn中冲突的解决
- VS2010和VS2012在Microsoft.Cpp.Win32.user中设置VC++目录冲突的解决
- 解决JS库中$符号的冲突问题
- 关于VC link2005 重复定义,定义冲突的错误解决
- Git中代码冲突的解决方式
- ExpandableListview中 解决ImageButton冲突的问题。
- 解决团队中冲突的方法
- Eclipse中演示Git冲突的解决
- 解决 ASP.NET 中文本框上按回车时系统缺省提交按钮的问题
- vc 扩展dll中dlg的ID冲突的问题
- VC中引用第三方库,常见的库冲突问题
- 开源项目的各种协议简单介绍
- Linux中EXPORT_SYMBOL的用法
- 四极管:串口驱动的具体开发(一)
- _RecordsetPtr使用方法
- 高级数据仓库
- VC中缺省库冲突的解决
- 关于SQLite 数据库 读写图片的问题
- C#技术分享【PDF转换成图片——11种方案】
- gui
- Spring 和struts 整合的三种方式
- 读书笔记 -- 《瓦尔登湖》
- 黑马程序员:java课程要点-面向对象
- JavaScript就这么回事
- 使用Immutable对象解决线程安全