在 Linux 系統中,動態鏈接庫(DLL)的概念與 Windows 系統中的 DLL 略有不同。在 Linux 中,共享庫(shared library)是用于替代 DLL 的。要在 Linux 的共享庫中實現類似于 Windows DLLmain 中的初始化邏輯,你需要創建一個名為 init
的函數,并在共享庫加載時調用它。
以下是如何在 Linux 共享庫中實現初始化邏輯的步驟:
init
的函數,該函數將在共享庫加載時執行。這個函數的原型應該如下所示:extern "C" {
int init(void);
}
在 init
函數中實現你的初始化邏輯。例如,你可以注冊信號處理函數、分配資源或初始化全局變量等。
編譯你的共享庫。在 Linux 中,使用 GCC 編譯器編譯共享庫。例如,如果你的源代碼文件名為 mylib.c
,你可以使用以下命令編譯共享庫(將 /path/to/output/
替換為你希望存放共享庫的目錄):
gcc -shared -fPIC -o /path/to/output/libmylib.so mylib.c
dlopen()
函數加載共享庫。例如:#include <dlfcn.h>
int main() {
void *handle = dlopen("/path/to/output/libmylib.so", RTLD_LAZY);
if (!handle) {
perror("dlopen");
return 1;
}
// 在這里調用共享庫中的函數或訪問全局變量
// 當不再需要共享庫時,使用 dlclose() 函數卸載它
dlclose(handle);
return 0;
}
當你的應用程序加載共享庫時,init
函數將被自動調用。當應用程序不再需要共享庫時,dlclose()
函數將被調用,從而允許你在 init
函數中釋放資源。