我是Linux,Windows和osX上C++庫的開發者。由於osX現在不能正確處理匿名異常,因此我考慮乾淨地標記需要導出的符號。在these explanations之後,我定義了兩個宏:FOO_API
和FOO_LOCAL
用於標記符號。現在我有以下問題:C++符號導出
我在自己的文件中定義每個類(因爲我不想要1000個以上的長文件)。如果類A
僅用於我的庫中,則將其標記爲FOO_LOCAL
是有意義的。但是,如果類B
有一個A
類型的私人成員,並且B
類是FOO_API
,那麼我收到編譯器警告,並且鏈接失敗(找不到符號)。這似乎違背了這些出口屬性的重點。那麼,它應該是什麼?我用類似class FOO_LOCAL A {...}
的標記我的課是這樣嗎?
是否也沒有辦法讓所有私人會員在本地? (因爲他們是私人的,他們不應該被直接訪問),這將使標記過程更簡單...
最後,當我標記例如我的異常類,它編譯和運行正常,但顯示符號(nm -C -D my_lib.so
)顯示,所有符號仍然存在......
我不明白...類成員變量沒有聯動,除非他們是靜態的。如果是這樣的話? – rodrigo
@rodrigo我想問題是,當包括API頭文件和創建API類的實例(可能需要在堆棧上分配成員)時,這些都是'看到'的。也許使用指針在API類中轉發聲明的本地類也可以解決問題。 –
@ g-makulik:完全沒有意義。可視性是鏈接的一個屬性,所以如果沒有鏈接,可見性就沒有問題。除非A的構造函數是內聯的,當然... – rodrigo