2012-12-07 68 views
0

我知道我可以使用dlopen在C/C++中打開共享庫。
我可以使用dlopen調用的結果來確定是否存在功能。動態加載共享可選對象

但是,我需要加載一個現有的庫,許多功能。

是否有替代方案重新定義所有這些函數的函數指針版本的長列表併爲它們分配每個函數dlsym?

回答

3

一個可能的解決方案是重新思考一點點。

共享的可選庫可能非常大,但如果它是可選的,那麼您正在編寫的與其接口的代碼當然也是可選的?

要減少dlsym()賦值的數量,您可以編寫自己的動態庫,它與實現僅OPTIONAL組件的可選庫鏈接。

然後,您只需從應用程序的非可選部分動態加載和分配應用程序的可選組件。

這可能,如果你的可選庫是一個C庫和可選組件是C++對象,但你有它的東西過度複雜...

+0

其實,這不是一個壞主意。我會試一試。 – Matt

+0

這實際上是一個好主意。我最終將使用共享庫功能的api(稱爲optional.so)移動到單獨的共享庫中 - 將其稱爲myapi.so。在啓動時,我嘗試加載optional.so,如果它成功加載myapi.so。這使得可選部件可用。 – Matt

+0

其實,我只是嘗試加載鏈接到optional.so的myapi.so。當我將dlopen調用到myapi.so時,它會自動加載optional.so。因此,成功加載myapi.so意味着可選.so也在那裏。 – Matt