c++ - 在共享对象 unix/linux 中查看 c++ 方法/构造函数

标签 c++ linux unix shared-libraries

我是 unix/linux 世界的新手,正在尝试查看我编译到共享对象中的 c++ 类的方法和构造函数。

作为测试,我编译如下:sudo clang++ -Wall -dynamiclib dynclass.cpp -o dynclass.so

class dynclass {
  public:
    int x;
    int y;
    int z;
  dynclass () {

  }

  void  emptymethod () { }

};

int foo (void) { return 0; }

然后我使用(查看共享对象中包含的函数/方法):nm dynclass.so 返回:

0000000000000f90 T __Z3foov
                 U dyld_stub_binder

只有静态函数是可见的。如何查看 emptymethod 和构造函数?

最佳答案

这是因为构造函数和emptymethod 是在类声明的主体中声明和定义的。在类声明主体中定义的函数是内联函数(因此不可导出);然而,这实际上并不意味着它将被内联。

将构造函数的定义移到类声明之外会导致在共享对象的符号表中列出构造函数(和析构函数):

class dynclass {
    ...
};

dynclass:dynclass() {}

共享对象符号表:

0000000000000712 T _Z3foov
0000000000000708 T _ZN8dynclassC1Ev
0000000000000708 T _ZN8dynclassC2Ev

关于c++ - 在共享对象 unix/linux 中查看 c++ 方法/构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22117842/

相关文章:

c++ - 一组类如何使用变量?

arrays - 我如何在 ruby​​ 中用数组索引替换和数组元素?

linux - 命令 'sudo gearmand -d' 和 'sudo service gearman-job-server start' 有什么区别?

c++ - 调试模板代码 : What are some modern ways to do this on the command line?

c++ - 使用 Objective-C 获取 Photoshop 的 Action 列表

c++ - 将类转换为模板

linux - cpu 亲和性,只允许进程在特定的 cpu 上运行

shell - xargs 在换行符处拆分而不是空格

linux - 重新格式化输出

c++ - 初始化并使用 C++ std::string 作为 char 数组