当我使用-fvisibility = hidden时,为什么还要导出构造函数

时间:2013-01-30 04:24:28

标签: c++ gcc

我有一个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()

我在google上搜索这个问题并找到另一个gcc选项:“-fvisibility-inlines-hidden”到隐藏的内联函数,但是我仍然得到相同的结果,甚至在编译A.o时添加此选项

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

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

1 个答案:

答案 0 :(得分:0)

感谢Mike Seymour。我编译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