当前位置:  开发笔记 > 编程语言 > 正文

var-create无法创建变量对象

如何解决《var-create无法创建变量对象》经验,为你挑选了1个好方法。



1> Eldar Abusal..:

以防万一,该问题现在被追踪为CPP-8693.

根本原因与libstdc ++ dual ABI有某种关联.std::string类型的全局符号被不同地修改,这反过来混淆了GDB.

在GCC 5.1版本的libstdc ++引入了一个新的库ABI,其包括新的实现方式std::stringstd::list.这些更改对于符合2011 C++标准是必要的,该标准禁止写入时写入字符串并要求列表跟踪其大小.

给出以下代码:

std::string global_var = "Hi there!";
static std::string static_var = "Hello";

这是相关的nm输出:

0000000000602240 B _Z10global_varB5cxx11
0000000000602280 b _ZL10static_var

一种可能的解决方法是禁用C++ 11 ABI.在CMakeLists.txt中,在行后面添加以下set(CMAKE_CXX_STANDARD 11)行(如果有):

add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0)

这使得符号名称被不同地修改,以某种方式GDB再次开心:

0000000000602238 B global_var
0000000000602248 b _ZL10static_var

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有