我是 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/