2012-12-07 49 views
2

我正在使用ACE庫來完成一些反應器作業。在linux上,默認的ACE編譯輸出是libACE.so。我通常使用-lACE編譯選項來編譯它,但這取決於我是否在ld.so.conf.d目錄中配置了libACE.conf。 如果我想子類ACE_Task,它可以從ACE.so導入,編譯依賴於libACE.so,如果我想動態加載ACE.so,我該怎麼做? 我試過了,如果我使用dlopen,那麼會發生鏈接錯誤。 那麼,有什麼辦法來動態加載ACE.so,仍然可以像這樣實現ACE_Task?如何在Linux上從.so中分配C++類?

class test: public ACE_Task<ACE_MT_SYNCH> 
{ 

} 
+0

那麼你有用'ld.so.conf'配置的庫嗎? –

+0

我已經配置了它與ld.so.conf,這是很好的編譯,但是當我想釋放另一臺PC上的所有文件時,我必須配置ld.so.conf,有沒有什麼辦法可以分區,分類是從.so文件的類,我仍然可以在運行時加載它? – lovecpp

回答

1

子分類主要發生在編譯時。您需要在某個頭文件[s]中正確定義超類[es]。

在運行時,重要的是vtable和繼承成員函數(也許RTTI)的可用性。

您可能想要將libACE.so鏈接到您的共享對象(您正在構建的dlopen)。這是可能的,例如g++ -rdynamic -shared your*.pic.o -lACE -o yoursharedobject.so

+0

謝謝,你的回答看起來很合理,我會試試看 – lovecpp