首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >__cxa_demangle在开发工具集rhel6 (centos6)上失败-4 gcc-5.2

__cxa_demangle在开发工具集rhel6 (centos6)上失败-4 gcc-5.2
EN

Stack Overflow用户
提问于 2016-04-03 23:43:21
回答 1查看 222关注 0票数 0

我已经尝试过最小的测试用例。此病例以devtoolset-4 (gcc-5.2)的方式传递,而在流变-6下失败.Status -2表示"mangled_name不是C++ ABI损坏规则下的有效名称“https://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.3/a01696.html

如果我想在RHEL-6上使用gcc-5.2,我是做错了吗?还是说这是个bug?如果有,有什么建议吗?到目前为止,我最好的想法是在将"IJ“这个错误的名字重新定义为"II”之后,再将其交给__cxa_demangle()。如果这可能是相对可靠的,我可以接受它。

代码语言:javascript
复制
#include <iostream>
#include <string>
#include <tuple>
#include <typeinfo>
#include <cxxabi.h>

#define DUMP(x) std::cout << #x << " is " << x << std::endl

template<typename T>
void print_type(T t)
{
    int status;
    auto name = typeid(t).name();
    DUMP(name);
    auto thing2 = abi::__cxa_demangle(name, 0, 0, &status);
    if(status == 0)
    {
        DUMP(thing2);
    }
    else
    {
        std::cout << typeid(t).name() << " failed to demangle\n";
        DUMP(status);
    }
}

typedef std::tuple<foo_t, foo_t> b_t;

int main(int argc, char **argv)
{
    std::tuple<bool, bool> t;
    print_type(t);
}

Centos-6输出

代码语言:javascript
复制
name is St5tupleIJbbEE
St5tupleIJbbEE failed to demangle
status is -2

Centos-7输出

代码语言:javascript
复制
name is St5tupleIJbbEE
thing2 is std::tuple<bool, bool>

Centos-6输出与devtoolset-3 (gcc-4.9)

代码语言:javascript
复制
name is St5tupleIIbbEE
thing2 is std::tuple<bool, bool>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-04 04:38:36

代码语言:javascript
复制
std::string typestring(typeid(T).name());
auto pos = typestring.find("IJ");
if(pos != std::string::npos)
{
    // gcc-5.2 uses IJ in typestring where
    // gcc-4.9 used II - this fugly hack makes
    // cxa_demangle work on centos/rhel-6 with gcc-5.2
    // eg std::tuple<bool, bool> 
    typestring[pos + 1] = 'I';
}
rv = abi::__cxa_demangle(typestring.c_str(), 0, 0, &status);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36392657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档