4

我有一个A类:

class A
{
public:
   A() {}
   virtual ~A() {}

   void Func();
};

和另一个使用 A 的 M 类。我想创建隐藏所有 A 符号的 libM.so。我使用以下脚本来编译它:

g++ -c A.cc -fPIC -fvisibility=hidden
g++ -c M.cc -fPIC
g++ -shared -z defs -o libM.so M.o A.o

但是当我使用“nm -DC libM.so”时,它仍然有

0000000000000c78 W A::A()
0000000000000c78 W A::A()

我在谷歌上搜索了这个问题,发现了另一个 gcc 选项:“-fvisibility-inlines-hidden”隐藏内联函数,但即使在编译 Ao 时添加此选项,我仍然得到相同的结果

g++ -c A.cc -fPIC -fvisibility=hidden -fvisibility-inlines-hidden

为什么“-fvisibility-inlines-hidden”没有效果?如何防止 A::A() 出现在 libM.so 的导出符号中?非常感谢你!

4

1 回答 1

1

感谢迈克·西摩。我应该在编译 M.cc 时添加 -fvisibility-inlines-hidden

g++ -c A.cc -fPIC -fvisibility=hidden -fvisibility-inlines-hidden
g++ -c M.cc -fPIC -fvisibility-inlines-hidden
g++ -shared -z defs -o libM.so M.o A.o
于 2013-01-31T04:40:59.043 回答