在C++中使用dlopen動(dòng)態(tài)加載庫(kù)需要包含頭文件<dlfcn.h>,并調(diào)用dlopen函數(shù)打開(kāi)庫(kù)文件。下面是一個(gè)簡(jiǎn)單的示例代碼:
#include <iostream>
#include <dlfcn.h>
int main() {
void* handle = dlopen("libexample.so", RTLD_LAZY);
if (!handle) {
std::cerr << "Error loading library: " << dlerror() << std::endl;
return 1;
}
// 獲取庫(kù)中的函數(shù)指針
void (*func)() = (void (*)())dlsym(handle, "exampleFunction");
if (!func) {
std::cerr << "Error finding function: " << dlerror() << std::endl;
return 1;
}
// 調(diào)用函數(shù)
func();
// 關(guān)閉庫(kù)
dlclose(handle);
return 0;
}
在上面的代碼中,我們使用dlopen函數(shù)打開(kāi)名為libexample.so的庫(kù)文件,并使用dlsym函數(shù)獲取庫(kù)中的函數(shù)指針。最后調(diào)用該函數(shù)并使用dlclose函數(shù)關(guān)閉庫(kù)。
需要注意的是,dlopen函數(shù)加載庫(kù)文件時(shí)需要指定庫(kù)文件的路徑,并且在使用dlsym獲取函數(shù)指針時(shí)需要指定函數(shù)名。