Linux 动态加载(Dynamic Loading)是指在程序运行时动态地加载共享库(Shared Object,通常以 .so
文件结尾)。共享库是一种可以在多个程序之间共享的代码库,可以减少内存占用和提高程序的可维护性。
Linux 动态加载主要有两种方式:
dlopen
、dlsym
等函数显式加载和调用共享库中的函数。以下是一个简单的示例,展示如何在 C 语言中动态加载共享库并调用其中的函数:
// example.c
#include <stdio.h>
void hello() {
printf("Hello from shared library!\n");
}
编译共享库:
gcc -shared -o libexample.so example.c
// main.c
#include <stdio.h>
#include <dlfcn.h>
int main() {
void *handle;
void (*hello)();
// 动态加载共享库
handle = dlopen("./libexample.so", RTLD_LAZY);
if (!handle) {
fprintf(stderr, "%s\n", dlerror());
return 1;
}
// 获取共享库中的函数指针
hello = (void (*)())dlsym(handle, "hello");
const char *dlsym_error = dlerror();
if (dlsym_error) {
fprintf(stderr, "%s\n", dlsym_error);
dlclose(handle);
return 1;
}
// 调用共享库中的函数
hello();
// 关闭共享库
dlclose(handle);
return 0;
}
编译主程序:
gcc -o main main.c -ldl
运行主程序:
./main
LD_LIBRARY_PATH
环境变量来指定共享库的搜索路径。LD_LIBRARY_PATH
环境变量来指定共享库的搜索路径。ldd
命令查看程序依赖的共享库版本。ldd
命令查看程序依赖的共享库版本。chmod
命令修改文件权限。chmod
命令修改文件权限。通过以上信息,你应该对 Linux 动态加载共享库有了全面的了解,并能够解决常见的相关问题。
领取专属 10元无门槛券
手把手带您无忧上云