假设我有一个非常基础的课程:
// lib.h
class A
{
public:
A();
void nop();
};
// lib.cpp
#include "lib.h"
A::A() {}
void A::nop() {}
Run Code Online (Sandbox Code Playgroud)
,我将其编译为共享库:
g++ lib.cpp -shared -o lib.so -fPIC
Run Code Online (Sandbox Code Playgroud)
当我从库的代码部分查看导出的符号时,我看到其中的三个:
$ nm lib.so | grep ' T '
00000000000010f6 T _ZN1A3nopEv
00000000000010ea T _ZN1AC1Ev
00000000000010ea T _ZN1AC2Ev
$ nm lib.so | grep ' T ' | cut -d ' ' -f3 | xargs c++filt
A::nop()
A::A()
A::A()
Run Code Online (Sandbox Code Playgroud)
为什么构造函数导出两次?我已经在Linux上使用gcc和clang进行了测试,结果是相同的。
PS:我并不是要解决一个真正的问题,这只是我注意到的一个特点。
| 归档时间: |
|
| 查看次数: |
63 次 |
| 最近记录: |