无法解析的外部符号 "public: static void __cdecl std::_String_base::_Xran(void)" (?_Xran@_String_base@std@@SAXXZ)"
采用下面的方法。重新编译了一下依赖的库,OK了。
问题描述:
今天用VS2010编译一个在VS2008下Coding的工程的时候,VS给出了一堆链接错误信息,如下图所示:

在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后其实可以搜索到如下的内容:
情况2:
如果你使用的是VS2010的话,那么在产生的1.txt中搜索_Xlen与_Xran的话,则为如下的内容:
补充:其中第二个_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)"的更多相关文章
- 使用log4cplus时遇到的链接错误:无法解析的外部符号 "public: static class log4cplus::Logger __cdecl log4cplus::Logger::getInstance(class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,
#include "stdafx.h" #include <log4cplus/logger.h> #include <log4cplus/loggingmacr ...
- 无法解析的外部符号 "public: virtual struct CRuntimeClass * _
SetupPropertyPage.obj : error LNK2001: 无法解析的外部符号 "public: virtual struct CRuntimeClass * __this ...
- 一个小错误:error LNK2019: 无法解析的外部符号 "public: __thiscall Turtle::~Turtle(void)" (??1Turtle@@QAE@XZ),该符号在函数 _main 中被引用
昨天在撸代码的时候遇到了一个十分蛋疼的错误 : 错误: 1>3.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall Turtle::~ ...
- main.obj:-1: error: LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __thiscall CustomButton::metaObject(void)const " (?metaObject@CustomButton@@UBEPBUQMetaObject@@XZ)
QTCreator 运行时报错 main.obj:-1: error: LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject cons ...
- error LNK2019: 无法解析的外部符号 "public:
错误 1 error LNK2019: 无法解析的外部符号 "public: __thiscall test::test(void)" (??0test@@QAE@XZ),该符号在 ...
- vs2010+qt4编译出现error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject等错误
1.当vs2010编译qt时会出现以下错误: 1>------ 已启动全部重新生成: 项目: MyDialog, 配置: Debug Win32 ------ 1>生 ...
- error LNK2001: 无法解析的外部符号 "public: char * __thiscall
error LNK2001: 无法解析的外部符号 "public: char * __thiscall CamPinPadCtrl::KeysConvert(unsigned long,ch ...
- 错误 1 error LNK2019: 无法解析的外部符号 "public: __thiscall Distance::Distance(int)" (??0Distance@@QAE@H@Z),该符号在函数 _main 中被引用
错误: 错误 1 error LNK2019: 无法解析的外部符号 "public: __thiscall Distance::Distance(int)" (??0Distanc ...
- error LNK2001: 无法解析的外部符号 "public: virtual long __stdcall CBaseFilter(转)
原文转自 https://www.cnblogs.com/xiongjiaji/archive/2010/12/31/2476565.html 今天用VS2005编译DirectShow程序,发现出来 ...
随机推荐
- 笔记-python-lib-contextlib
笔记-python-lib-contextlib 1. contextlib with 语句很好用,但不想每次都写__enter_-和__exit__方法: py标准库也为此提供了工具模块c ...
- linux c 调用子文件函数
今天在学习初级linux c的时候遇到了如下问题:通过主函数调用同路径下的子文件函数调用失败.博主是这样一一解决的: 首先:hello.c: hello.c: #include<bool.c&g ...
- 一、MySQL数据库之简介和安装
一.基础部分 1.数据库是简介 之前所学,数据要永久保存,比如用户注册的用户信息,都是保存于文件中,而文件只能存在于某一台机器上. 如果我们不考虑从文件中读取数据的效率问题,并且假设我们的程序 ...
- WPF 加载等待动画
原文:WPF 加载等待动画 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_29844879/article/details/80216587 ...
- 6.Mongodb索引
1.索引 2.索引的命令
- web.py上传文件并解压
有个需求是从php端上传zip文件到python端并且解压到指定目录,以下是解决方法 1.python端,使用的web.py def POST(self): post_data = web.input ...
- 确保VDI顺利部署 试点项目是关键
[TechTarget中国原创] 由于管理员没有全面测试虚拟桌面的性能表现导致无数VDI项目的最终失败,因此需要借助于试点项目来保证VDI部署的最终成功实施. VDI试点项目是从物理桌面向虚拟桌面迁移 ...
- Python 实现随机打乱字符串
from random import shuffle def shuffle_str(s): # 将字符串转换成列表 str_list = list(s) # 调用random模块的shuffle函数 ...
- springboot配多数据源
多数据源配置 https://blog.csdn.net/neosmith/article/details/61202084 https://www.cnblogs.com/zhangboyu/p/7 ...
- Cannot create a secure XMLInputFactory --CXF调用出错
在调用方法前加上下面三句即可调用成功: Properties props = System.getProperties(); props.setProperty("org.apache.cx ...