我目前正在开展一个禁止包含C ++标准库的项目。我们使用的其中一个编译文件列出了以下符号:
_Xran__Q2_3std12_String_baseCFv
我认为这与标准库字符串有关。我这么想是不正确的?如果没有,是否有人知道一种有效的方法来追踪这个符号的包含点?粗略搜索代码库并没有显示任何明显的东西。
答案 0 :(得分:2)
这似乎不是VC破坏,总是以问号开头。
然而,它符合G ++修改方案,正如运行
所建议的那样$ c++filt --format=gnu "_Xran__Q2_3std12_String_baseCFv"
std::_String_base::_Xran( const(void))
奇怪的是_Xran
似乎是VC std::string
实施的一部分。
无论如何,您正在寻找的标题可能是#include <string>
。
编辑:由于c ++ filt的输出 - 你确定它是用VC ++编译的吗?
答案 1 :(得分:0)
如果string.h确实包含在某个地方,你可以找到:
在每个#include
指令后面的下一行放置以下代码:
using namespace std;class string;struct{void hxtestfunc(void){typedef string hxtesttype;}};
编译时,只有在string.h(或任何直接或间接包含string.h的文件)包含在某处之前,才会生成“模糊符号”错误。
因此,第一次报告“模糊符号”错误将导致您在关键包含后立即行。
在Visual C ++中,您可以使用搜索和替换正则表达式:
替换
“{#包括。*}”
与
“\ 0 \ n使用命名空间std;类字符串; struct {void htestfunc(void){typedef string htesttype;}};”
整个项目。