• 继续折腾LNK 2005错误


    这次是因为要把一个很久的老项目改成使用Unicode字符集,又一次遇到了LNK 2005错误

    先说说怎么把老项目改成Unicode字符集吧,首先要有足够的信心能把项目改好,比如我这次改的项目,也不算很大,但是也有好几万行,一改成使用Unicode字符集编译后,瞬间出现上百个错误(VC2010碰到错误太多,超过一百个之后就会停止编译),不要看到数不清的错误之后就觉得改不好了,其实真正归纳起来需要改的就几种,改到最后只不过是体力活路问题,下面大概说一下,因为是事后写文,都是凭记忆,也许有遗漏的,如果有这方面需要的同学可以留言讨论。

    在我改动的项目里面,CString和char *到处混杂使用(是MFC程序),我是这样改的:

    1. 对于底层的函数绝对不要动,比如这样的:

    int IntConnect(const char *user, const char *pass, const char *ip)

    保证底层的函数依然用char *这样的形式,因为改动之后牵一发动全身,就没法改了,而且也没必要修改,怎么做看后面

    2. 对于使用可随字符集变化的函数用_T()

    CString CIni::GetString(LPCTSTR lpSection, LPCTSTR lpKey, LPCTSTR lpDefault) const

    在使用的时候记得对书面字符串用_T()宏来转换,

    str = m_IniString.GetString(_T("*****"), _T("*****"), NULL);

    3. 用W2A()和A2W()宏来转换CString和其他宽字节字符变量

    举两个例子吧:

    #ifdef _UNICODE
    USES_CONVERSION;
    strAuth = EncodeTextBase64(A2W(test));
    #else
    strAuth = EncodeTextBase64(test);
    #endif

    #ifdef _UNICODE
    USES_CONVERSION;
    strcpy(pchIP, W2A(strIP));
    SetPassword(W2A(pchPassword));
    #else
    strcpy(pchIP, strIP);
    SetPassword(pchPassword);
    #endif

    最后来说说LNK 2005错误,先拷贝一段内容:

    http://zhanyonhu.blog.163.com/blog/static/16186044201023094754832/

    原因:

    CRT 库对 new、delete 和 DllMain 函数使用弱外部链接。MFC 库也包含 new、delete 和 DllMain 函数。这些函数要求先链接 MFC 库,然后再链接 CRT 库。

    当 C 运行时 (CRT) 库和 Microsoft 基础类 (MFC) 库的链接顺序有误时,可能会出现以下 LNK2005 错误。

    解决方法:

    强制链接器按照正确的顺序链接库!

    project->properties->Linker->Ignore Specific Library 添加 uafxcwd.lib Libcmtd.lib

    在Additional Dependencied添加uafxcwd.lib Libcmtd.lib

    注意,对于Debug和Release版本,还有动态和静态方式使用MFC,以及使用多线程库不同方式下,lib名称会稍有不同

    我这里使用的是uafxcw.lib;Libcmt.lib

    如果是使用多字节字符集编译的话,就是nafxcw.lib,如果是Debug版本的话,基本上为了区别,lib名称后面都会带一个d字母,比如Libcmtd.lib

    大概就这些,有问题的话可以大家讨论下。

  • 相关阅读:
    康拓展开和康拓逆展开
    快速乘法(基于快速幂)
    扩展欧几里德 POJ 1061
    九度OJ 1552座位问题(dp)
    UVA-10462.Is There A Second Way Left(Kruskal+次小生成树)
    POJ-1679.The Unique MST.(Prim求次小生成树)
    次小生成树(Prim + Kruaskal)
    POJ-1287.Network(Kruskal + Prim + Prim堆优化)
    最小生成树基础算法(Prim + Krustal)
    POJ-2492.A Bug's Life(带权并查集)
  • 原文地址:https://www.cnblogs.com/s5689412/p/3808544.html
Copyright © 2020-2023  润新知