.so 库的动态加载和静态加载
时间: 2023-09-22 20:14:42 浏览: 119
.so是Linux下的共享库文件,可以被动态加载或静态链接。
动态加载是指在程序运行时,通过调用dlopen函数加载共享库,将库中的函数映射到程序的地址空间中,程序可以直接调用共享库中的函数。动态加载可以减小程序的内存占用,因为程序只有在需要用到共享库函数时才会加载该共享库。
静态链接是指在编译时将共享库的代码直接连接到程序中,生成一个独立的可执行文件。这样程序在运行时就不需要再加载共享库。静态链接可以使程序运行更加稳定,因为程序与共享库的依赖关系已经在编译时确定,但是会增加程序的内存占用和磁盘空间占用。
相关问题
qt静态加载.so库
在Qt中,可以使用静态链接来加载.so库。具体步骤如下:
1. 将.so文件复制到Qt项目的文件夹中。
2. 在.pro文件中添加以下内容:
```
LIBS += -L/path/to/so/file -lso_filename_without_lib_prefix
```
其中,/path/to/so/file是.so文件所在的路径,so_filename_without_lib_prefix是.so文件的名称(去除lib前缀和.so后缀)。
3. 在代码中使用以下语句加载.so库:
```
QLibrary lib("/path/to/so/file/so_filename_without_lib_prefix.so");
if (lib.load()) {
// 加载成功,可以使用库中的函数
// 获取函数指针
typedef void (*FuncType)();
FuncType func = (FuncType)lib.resolve("function_name_in_so");
if (func) {
// 调用函数
func();
}
} else {
// 加载失败
}
```
其中,function_name_in_so是.so库中的函数名称。注意,要先通过QLibrary的load()函数加载.so库,然后才能获取到库中函数的指针并调用。
阅读全文