相关疑难解决方法(0)

1511
推荐指数
11
解决办法
72万
查看次数

解开std :: type_info :: name的结果

我目前正在研究一些日志代码,它们应该 - 除其他外 - 打印有关调用函数的信息.这应该相对容易,标准C++有一个type_info类.它包含typeid'd类/函数/ etc的名称.但它被破坏了.它不是很有用.即typeid(std::vector<int>).name()回归St6vectorIiSaIiEE.

有没有办法从中产生有用的东西?就像std::vector<int>上面的例子一样.如果它只适用于非模板类,那也没关系.

该解决方案应该适用于gcc,但如果我可以移植它会更好.这是为了记录所以它不是那么重要,它不能被关闭,但它应该有助于调试.

c++ gcc name-mangling

85
推荐指数
6
解决办法
4万
查看次数

以编程方式在共享库中获取函数名称

我可以在使用时以编程方式从共享库(仅限Linux)获取所有函数名称的列表dl_open()吗?

我想要这样的东西:

std::vector<std::string> list_all_functions(void *dl) { 
   //... what can I do here?
}

int main() {
    void * dl = dl_open("./mylib.so", RTLD_NOW);
    auto functions = list_all_functions(dl);
    //...
    dl_close(dl);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

示例库(mylib.so)

标题(.h):

extern "C" {
    int sum (int a, int b);
}
Run Code Online (Sandbox Code Playgroud)

来源(.c):

int sum (int a, int b) { return a + b; }
Run Code Online (Sandbox Code Playgroud)

我知道的肮脏的黑客:使用nmobjdump实用

c c++ linux shared-libraries dlopen

11
推荐指数
2
解决办法
1332
查看次数

标签 统计

c++ ×3

c ×2

name-mangling ×2

dlopen ×1

extern-c ×1

gcc ×1

linkage ×1

linux ×1

shared-libraries ×1