c++ 动态库so 写法
时间: 2023-10-13 09:06:41 浏览: 133
在C语言中,动态库的写法如下:
1. 定义库函数的头文件
```c
#ifndef LIBRARY_H
#define LIBRARY_H
int add(int a, int b);
#endif /* LIBRARY_H */
```
2. 实现库函数
```c
#include "library.h"
int add(int a, int b) {
return a + b;
}
```
3. 编译动态库
```bash
gcc -shared -fPIC -o liblibrary.so library.c
```
其中,-shared 表示编译为动态库,-fPIC 表示编译为位置独立代码(Position Independent Code)。
4. 使用动态库
在程序中,可以通过以下方式来使用动态库:
```c
#include <stdio.h>
#include <dlfcn.h> /* 动态链接库头文件 */
int main() {
void *handle;
int (*add)(int, int);
char *error;
/* 打开动态库 */
handle = dlopen("./liblibrary.so", RTLD_LAZY);
if (!handle) {
fprintf(stderr, "%s\n", dlerror());
return 1;
}
/* 获取库函数地址 */
add = dlsym(handle, "add");
if ((error = dlerror()) != NULL) {
fprintf(stderr, "%s\n", error);
dlclose(handle);
return 1;
}
/* 调用库函数 */
printf("%d\n", add(1, 2));
/* 关闭动态库 */
dlclose(handle);
return 0;
}
```
其中,通过 dlopen() 函数打开动态库,通过 dlsym() 函数获取库函数地址,然后就可以调用库函数了。最后通过 dlclose() 函数关闭动态库。
阅读全文