无法解析的外部符号 "public: static void __cdecl std::_String_base::_Xran(void)" (?_Xran@_String_base@std@@SAXXZ)"

时间:2022-08-31 00:29:12

采用下面的方法。重新编译了一下依赖的库,OK了。

  问题描述:

今天用VS2010编译一个在VS2008下Coding的工程的时候,VS给出了一堆链接错误信息,如下图所示:

无法解析的外部符号 "public: static void __cdecl std::_String_base::_Xran(void)" (?_Xran@_String_base@std@@SAXXZ)"

在ErrorList里面列出了34个链接错误信息,但仔细看的话,其实很多都是重复的,只有两三个外部符号未正确解析,如下:

"public: static void __cdecl std::_String_base::_Xran(void)" (?_Xran@_String_base@std@@SAXXZ)

"public: static void __cdecl std::_String_base::_Xlen(void)" (?_Xran@_String_base@std@@SAXXZ)

问题分析: 

首先,可以确定是程序在Build(构建)过程中,链接静态链接库libprotobuf.lib的时候出现外部符号无法解析的问题,而且可以看出 libprotobuf.lib库中的很多的中间目标文件(Windows下以.obj作后缀名的文件)都对此外部符号存在着引用,但在符号重定位时候却 在全局符号表中找不到引用的符号。

而_Xran和_Xlen这两个符号到底是什么呢,通过google可以大致了解到时string类里面的两个符号,难道问题出在对于string类的引 用么?那么我们可以通过下术的步骤来观察一个引用string头文件的源文件经过IDE的预处理后是怎么样的

1、新建一个名为Test.CPP文件,内容很简单,只是包含一个string头文件,即#include<string>

  2、打开VS带的Command Prompt,输入命令 CL /EP Test.cpp > D:\\1.txt

上述命令为使用MSVC的编译器对Test.cpp进行预处理操作,并将内容重定向到1.txt中。

情况一:

如果你用的VS2005或者VS2008下的命令行工具的话,在打开1.txt后其实可以搜索到如下的内容:

无法解析的外部符号 "public: static void __cdecl std::_String_base::_Xran(void)" (?_Xran@_String_base@std@@SAXXZ)"

情况2:

如果你使用的是VS2010的话,那么在产生的1.txt中搜索_Xlen与_Xran的话,则为如下的内容:

无法解析的外部符号 "public: static void __cdecl std::_String_base::_Xran(void)" (?_Xran@_String_base@std@@SAXXZ)"

补充:其中第二个_Xran与_Xlen是在类basic_string中定义的,显然与VS2005与VS2008下产生的不同。

 问题总结:

静态链接库libprotobuf.lib在旧版本IDE上编译的,所以string类中符号被解析成形如static void __cdecl _Xlen()

而在高版本的VS2010上string中的_Xlen与_Xran符号则被解析成了__declspec(noreturn) void _Xlen() const

所以才会在链接过程中出现上述开头出现的一堆问题

问题解决:

第一种方法:

     重新在高版本的IDE下编译libprotobuf.lib,这种方法最行之有效啦,也很简单

第二种方法:

可以新建一个链接库,导出无法解析的几个符号,并这几个符号实现中重定向到VS2010下预处理后的那几个符号即可。具体参考这个网址:http://social.msdn.microsoft.com/Forums/en/vcgeneral/thread/5ac28a31-3339-4db1-90f4-68edad360309 里面的JN123给出的方法

欢迎装载,装载请注明出处:http://www.cnblogs.com/royenhome

无法解析的外部符号 "public: static void __cdecl std::_String_base::_Xran(void)" (?_Xran@_String_base@std@@SAXXZ)"的更多相关文章

  1. 使用log4cplus时遇到的链接错误:无法解析的外部符号 &quot&semi;public&colon; static class log4cplus&colon;&colon;Logger &lowbar;&lowbar;cdecl log4cplus&colon;&colon;Logger&colon;&colon;getInstance&lpar;class std&colon;&colon;basic&lowbar;string&lt&semi;wchar&lowbar;t&comma;struct std&colon;&colon;char&lowbar;traits&lt&semi;wchar&lowbar;t&gt&semi;&comma;

    #include "stdafx.h" #include <log4cplus/logger.h> #include <log4cplus/loggingmacr ...

  2. 无法解析的外部符号 &quot&semi;public&colon; virtual struct CRuntimeClass &ast; &lowbar;

    SetupPropertyPage.obj : error LNK2001: 无法解析的外部符号 "public: virtual struct CRuntimeClass * __this ...

  3. 一个小错误:error LNK2019&colon; 无法解析的外部符号 &quot&semi;public&colon; &lowbar;&lowbar;thiscall Turtle&colon;&colon;~Turtle&lpar;void&rpar;&quot&semi; &lpar;&quest;&quest;1Turtle&commat;&commat;QAE&commat;XZ&rpar;,该符号在函数 &lowbar;main 中被引用

    昨天在撸代码的时候遇到了一个十分蛋疼的错误 : 错误: 1>3.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall Turtle::~ ...

  4. main&period;obj&colon;-1&colon; error&colon; LNK2001&colon; 无法解析的外部符号 &quot&semi;public&colon; virtual struct QMetaObject const &ast; &lowbar;&lowbar;thiscall CustomButton&colon;&colon;metaObject&lpar;void&rpar;const &quot&semi; &lpar;&quest;metaObject&commat;CustomButton&commat;&commat;UBEPBUQMetaObject&commat;&commat;XZ&rpar;

    QTCreator 运行时报错 main.obj:-1: error: LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject cons ...

  5. error LNK2019&colon; 无法解析的外部符号 &quot&semi;public&colon;

    错误 1 error LNK2019: 无法解析的外部符号 "public: __thiscall test::test(void)" (??0test@@QAE@XZ),该符号在 ...

  6. vs2010&plus;qt4编译出现error LNK2001&colon; 无法解析的外部符号 &quot&semi;public&colon; virtual struct QMetaObject等错误

    1.当vs2010编译qt时会出现以下错误: 1>------ 已启动全部重新生成: 项目: MyDialog, 配置: Debug Win32 ------            1>生 ...

  7. error LNK2001&colon; 无法解析的外部符号 &quot&semi;public&colon; char &ast; &lowbar;&lowbar;thiscall

    error LNK2001: 无法解析的外部符号 "public: char * __thiscall CamPinPadCtrl::KeysConvert(unsigned long,ch ...

  8. 错误&Tab;1&Tab;error LNK2019&colon; 无法解析的外部符号 &quot&semi;public&colon; &lowbar;&lowbar;thiscall Distance&colon;&colon;Distance&lpar;int&rpar;&quot&semi; &lpar;&quest;&quest;0Distance&commat;&commat;QAE&commat;H&commat;Z&rpar;,该符号在函数 &lowbar;main 中被引用

    错误: 错误 1 error LNK2019: 无法解析的外部符号 "public: __thiscall Distance::Distance(int)" (??0Distanc ...

  9. error LNK2001&colon; 无法解析的外部符号 &quot&semi;public&colon; virtual long &lowbar;&lowbar;stdcall CBaseFilter(转)

    原文转自 https://www.cnblogs.com/xiongjiaji/archive/2010/12/31/2476565.html 今天用VS2005编译DirectShow程序,发现出来 ...

随机推荐

  1. &lbrack;JBoss&rsqb; - JBAS015874&colon; JBoss AS 7&period;1&period;1&period;Final &quot&semi;Brontes&quot&semi; started - Eclipse中不能正常启动的解决方法

    在使用Eclipse + Jboss插件时,如果有时写配置文件写错,在重新启动发布JBoss时,会出现: 14:43:49,317 INFO  [org.jboss.as] (Controller B ...

  2. LA 4670 &lpar;AC自动机 模板题&rpar; Dominating Patterns

    AC自动机大名叫Aho-Corasick Automata,不知道的还以为是能自动AC的呢,虽然它确实能帮你AC一些题目.=_=|| AC自动机看了好几天了,作用就是多个模式串在文本串上的匹配. 因为 ...

  3. win7下64位系统memcache&sol;memcached安装教程

    折腾了1个多小时,终于搞定.操作系统时64位的,php5.3.13 类似于上一篇的xdebug安装教程~~ memcache和memcached的区别  在自己的新程序中打算全面应用memcached ...

  4. 今天收到报警邮件,提示网站502 bad gateway&comma;

    今天收到报警邮件,提示网站502 bad gateway, 输入网站url后果然无法打开: 登录服务器查看nginx进程正常: 查看fastcGI进程已经停止运行了: 问题找到后就该查找是什么原因产生 ...

  5. cloud-init 工作原理 - 每天5分钟玩转 OpenStack(171)

    cloud-init 是 linux 的一个工具,当系统启动时,cloud-init 可从 nova metadata 服务或者 config drive 中获取 metadata,完成包括但不限于下 ...

  6. Kali Linux安装VMWare Tools

    操作环境: 虚拟机操作系统: Kali Linux 2017.2 虚拟化软件: VMWare workstation 14 pro 加载光盘 在VMWare上依次点击"虚拟机->安装V ...

  7. SSH整合 pom&period;xml

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  8. &lbrack;PHP&rsqb; 算法-邻接矩阵图的广度和深度优先遍历的PHP实现

    1.图的深度优先遍历类似前序遍历,图的广度优先类似树的层序遍历 2.将图进行变形,根据顶点和边的关系进行层次划分,使用队列来进行遍历 3.广度优先遍历的关键点是使用一个队列来把当前结点的所有下一级关联 ...

  9. iOS UI进阶-4&period;0 地图与定位

    在移动互联网时代,移动app能解决用户的很多生活琐事,比如 导航:去任意陌生的地方 周边:找餐馆.找酒店.找银行.找电影院   在上述应用中,都用到了地图和定位功能,在iOS开发中,要想加入这2大功能 ...

  10. python windows 下pip easy&lowbar;install 使用错误的问题

    最近电脑重装了系统,又重新安装python .在官网下载了安装包后电脑成功安装了,但使用pip命令时出现以下错误 Fatal error in launcher: Unable to create p ...