[英]how can I be sure dlopen work properly
我正在嘗試使用dlopen將符號加載到內存中。
但是,我不確定是否可以正常工作。
我的代碼如下:
const char* lib_names[] = {"libudev.so.0.13.0"};
int lib = dlopen(lib_names[0], RTLD_NOLOAD | RTLD_LAZY | RTLD_GLOBAL);
這個lib可以為我判斷是否可以正確打開此共享庫嗎?
感謝您的任何反饋
dlopen()
返回void *
指針。 指針是傳遞給其他動態鏈接加載器函數的句柄。 因此,將您的返回類型更改為void *
。
void *lib = dlopen(...)
您可以檢查lib
以查看庫是否正確打開。 如果lib
為NULL,則該庫無法打開。 如果lib
不為NULL,則庫成功打開。 使用dlerror()
可獲得文本錯誤字符串,說明無法打開庫的原因。 例如:
void *lib = dlopen(...)
if (lib == NULL) {
fprintf(stderr, "Shared library failed to open: %s\n", dlerror());
exit(1);
}
請注意,設置了RTLD_NOLOAD
標志后, dlopen()
實際上不會打開該庫。 從手冊頁:
不要加載庫。 這可用於測試庫是否已駐留(如果不是,則dlopen()返回NULL;如果已駐留,則返回庫的句柄)。 此標志還可以用於在已經加載的庫上提升標志。 例如,以前使用RTLD_LOCAL加載的庫可以使用RTLD_NOLOAD | |重新打開。 RTLD_GLOBAL。 POSIX.1-2001中未指定此標志。
您可能需要刪除RTLD_NOLOAD
才能獲得所需的行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.