簡體   English   中英

為什么在使用-fvisibility = hidden時仍導出構造函數

[英]Why constructor still be exported when I using -fvisibility=hidden

我有A班:

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

   void Func();
};

和另一個使用A的類M。我想創建libM.so,它隱藏了所有A的符號。 我使用以下腳本進行編譯:

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”到隱藏的內聯函數,但是即使在編譯Ao時添加此選項,我仍然得到相同的結果

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

為什么“ -fvisibility-inlines-hidden”不起作用? 如何防止A :: A()出現在libM.so的導出符號中? 非常感謝你!

感謝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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM