不为以前所知的LNK2019问题
来源:互联网 发布:重庆商品房交易数据 编辑:程序博客网 时间:2024/05/01 12:56
今天将一个vs7.1的网络游戏项目转化为2005,一个解决方案中几个项目,有依赖关系,重新设置了正确的依赖关系,但编译总是出现LNK2019错误。
原方案中明显不了解“项目依赖项”的作用,而是在“额外依赖项”中把同一解决方案中几个项目生成的lib都放进去了,而且乱设置编译开关,结果一到2005中,立即就出现连接错误。
反复修改编译了半天,还是连接出错。
最后,想了想可能是自己对LNK2019错误的认识不够,于是运行msdn,索引“LNK2019”,仔细阅读,并看本项目的出错情况,终于发现了函数参数中有wchar_t。
而msdn2005说:“可能不是所有模块都使用相同的 /Zc:wchar_t 设置编译的,这样,类型引用便没有解析为可兼容的类型。要解决此问题,请确保所有模块中的类型都是兼容的,方法是使用相应的 /Zc:wchar_t 设置进行编译(例如,要使用 Visual C++ 2005 工具集生成与以前版本中的模块链接的模块,请使用 /Zc:wchar_t-),或者尽可能更新类型以使其兼容。”
把解决方案中各个项目的/Zc开关检查了下,发现其中2个项目把C/C++----语言-----“将wchar_t视为内置类型”(/Zc)关了,选择“是”,连接成功。
注:/Zc开的情况下,函数参数unsigned short*和wchar_t*是不匹配的,因为wchar_t是个内置类型,而不是宏定义。unsigned short也是一个类型,两者的区别,就像int和string之间差距一样大。编译器会将他们当作不一样的,而且不能强制转换。定义的函数,也会变成多态,而不会出现重定义错误。
void func(unsigned short*)和void func(wchar_t*)是两个函数。
如果定义了void func(unsigned short*),而用wchar_t* t=L"";func(t),就会出现连接错误,找不到该符号。要想能这样调用,就要关闭/Zc。
感受:如果发现网上的各种解释都不能解决问题时,还是查阅下msdn,msdn永远比搜索引擎靠谱:-)
- 不为以前所知的LNK2019问题
- 数组那些不为菜鸟所知的秘密(一)
- 数组那些不为菜鸟所知的秘密(two)
- 数组那些不为菜鸟所知的秘密(零)
- 红客所知的十五大问题
- C语言基础课程 第二课 HelloWorld不为菜鸟所知的秘密
- 结构体那些不为菜鸟所知的秘密--位域
- Windows下几个不为你所知的选择、复制和粘贴快捷键(insert、home、end)
- 探悉 Excel 中不为人所知的技巧
- 双核处理器不人所知的5个方面
- 爱因斯坦不为人所知的十大秘密
- 苹果电脑不为人所知的第三个创始人(转)
- 乔布斯不为外界所知贡献:打造更环保的苹果
- winsock 模型 据我所知12000个左右,以前看到过,在哪里看的忘记了 evnet
- 以前不知道的zcat
- 以前不知道的Date
- 以前遇到的问题
- OpenGL的 error LNK2019问题
- 二叉树先序中序后序遍历的非递归实现A
- 为我所想,最终为我所用
- 数据结构二叉树(背诵版)
- 【叶子函数分享二十三】计算两个日期之间的工作日
- jQuery阻止事件冒泡
- 不为以前所知的LNK2019问题
- 消息: Automation 服务器不能创建对象
- 总结OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别(转)
- 【叶子函数分享二十四】根据年月生成日历函数
- 使用frame和iframe的麻烦
- 【叶子函数分享二十五】从第一个汉字开始分割字符串
- 【叶子函数分享二十六】过滤掉字符串中重复的字符
- 关于正则表达式获取FCKEditor控件上传图片地址
- TinyXML中部分函数的使用