2013-02-20 80 views
0

Im在C++程序中使用dlopen()函數加載共享庫。如何檢查共享庫已成功加載或未使用dlopen加載?

那麼如何檢查它是否成功加載或不? 或者我們可以使用該庫中存在的任何函數的名稱改變來檢查該庫的加載嗎?

+0

dlopen函數在出錯時返回NULL,是你在找什麼?有關更詳細的解釋,請參閱dlopen的聯機幫助頁。 – SeedmanJ 2013-02-20 13:12:32

回答

1

manual page

如果dlopen()的由於某種原因失敗,則返回NULL。


dlsym功能無法處理的C++標識符,除非他們已經宣佈extern "C",或者你使用重整名稱。

1

如果未成功加載,則dlopen()返回NULL。

對dlopen的手冊頁()說:

返回值

如果無法找到文件,無法打開閱讀,不是通過一個合適的對象 格式處理dlopen(),或者在加載文件或重定位其符號引用的過程中發生錯誤時,dlopen()應返回NULL。 更詳細的診斷信息應通過dlerror()提供。

0

根據文檔(http://linux.die.net/man/3/dlopen),dlopen在任何失敗時返回NULL。所以你可以檢查並完成。但如果出於某種原因,您不相信圖書館是一個「好」的圖書館,您可以爲您的系統定義自己的約定。例如,您可能要求系統加載的任何庫都定義了一個具有特定名稱的符號,該符號具有某些特定屬性,直至包括您可以分配給想要編寫兼容庫的用戶的「API密鑰」之類的內容。

0

如果dlopen遇到錯誤,則返回NULL,並且dlerror將返回相應的錯誤消息。

0

如果每個人提到如果dlopen()失敗,你會得到一個null,但是如果你試圖解決爲什麼你變得神祕null,即使庫存在你指定的路徑,可能確保所有庫都存在於系統上這就是「特定的庫」所依賴的,否則調用將失敗,NULL;)

去使用extern「C」在你的.cpp文件中的函數,所以編譯器不要破壞它,你可以調用它一次庫被加載。