zoukankan      html  css  js  c++  java
  • VC++ : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall std::basic_string<wchar_t,struct std::char_traits<wchar_t>

           最近学习Google Breakpad,将其用在了自己的项目中,编译的版本为VS2010,没有什么问题。但是为了和之前的程序兼容,需要使用VS2008版本的程序,于是又编译了VS2008版本的代码,但是链接的时候出错了,错误如下:

      error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >(struct std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >::_Has_debug_it)" (__imp_??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@U_Has_debug_it@01@@Z)

           分析:上述错误从表面上看,是一般的链接错误“无法解析的外部符号”,但是检查加入的导入库文件没有错误,错误信息也没有具体定位到自己程序的某个函数上,而是定位在了basic_string<wchar_t,struct std::char_traits<wchar_t>这样的字符串模板上,位于系统文件中。程序中大量使用了wstring类型,使用VS2010是没有问题的。

           于是查看了wstring的原型定义,果然和错误中的定位一致。从网上查找相关解答,得知VS2008和VS2010之间竟然还有不兼容的问题,这有可能是导致VS2010的程序编译链接正常,而VS2008的程序就产生了上述的链接错误。

             typedef  basic_string<char,  char_traits<char>, allocator<char> >  string;

             typedef  basic_string<wchar_t,  char_traits<wchar_t>,  allocator<wchar_t> > wstring;

           将出错地方的wstring的地方换掉,可换成wchar_t*来实现兼容,果然程序能够正常链接了,尽管有一些相关的警告,但是程序编译链接过,也是够兴奋了~

        已编译好的GoogleBreakpad源代码(包括VS2008版本以及VS2010版本):

        VS2008:  链接: http://pan.baidu.com/s/1qY6LKz6 密码: iggj

        VS2010:  链接: http://pan.baidu.com/s/1sl6dI49 密码: b3vc

  • 相关阅读:
    十招教你从屌丝变身高富帅【转】
    无法在证书存储区中找到清单签名证书”错误的解决方法【转】
    上传头像进行裁剪——jQuery + HttpHandler 实现图片裁剪(适用于论坛, SNS)【转】
    在类库中获得Session值
    WinForm中Combobox绑定值问题
    Global.cs中自动获取未处理的异常
    程序员的7个坏习惯【转】
    外部JS文件中获取ASPX页面上服务器控件ClientID
    如何使用微软企业库
    防止代码腐烂【转】
  • 原文地址:https://www.cnblogs.com/MakeView660/p/6126441.html
Copyright © 2011-2022 走看看