[英]c++ symbols exports
我是Linux,Windows和osX上c ++庫的開發人員。 由於osX現在無法正確處理匿名異常,因此我考慮了干凈地標記需要導出的符號。 按照這些說明,我定義了兩個宏: FOO_API
和FOO_LOCAL
用於標記符號。 現在我有以下問題:
我將每個類都定義在自己的文件中(因為我不需要1000個以上的長文件)。 如果僅在我的庫中使用類A
,則可以使用FOO_LOCAL
進行標記。 但是,如果類B
具有類型A
的私有成員,並且類B
是FOO_API
,那么我會收到編譯器警告,並且鏈接失敗(未找到符號)。 這似乎無視這些導出屬性的全部含義。 那么,應該是什么呢? 我用class FOO_LOCAL A {...}
標記我的班級,對嗎?
也沒有辦法讓所有私人成員都在本地嗎? (由於它們是私有的,因此不應直接訪問它們),這將使標記過程不再那么繁瑣...
最后,當我標記例如異常類時,它會編譯並正常運行,但是顯示符號( nm -C -D my_lib.so
)顯示所有符號仍然存在...
您可以使用pimpl習慣用法向公眾隱藏API類的庫內部實現(並因此在鏈接庫時)。
S.th. 喜歡:
B.hpp:
class BImpl;
class FOO_API B
{
public:
// Public stuff
B();
~B();
void foo();
private:
BImpl* bimpl;
};
B.cpp:
#include "B.hpp"
#include "A.hpp"
struct BImpl
{
void foo()
{
// Do something with 'a'
}
A a;
};
B::B()
: bimpl(new BImpl())
{
}
B::~B()
{
delete bimpl;
}
void B::foo()
{
bimpl->foo();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.