c语言动态库导出案例
时间: 2023-07-13 21:18:49 浏览: 105
下面是一个简单的 C 语言动态库导出的例子,供参考:
1. 创建一个头文件 `mylib.h`,声明需要导出的函数:
```c
#ifndef MYLIB_H
#define MYLIB_H
// 导出函数,计算两个整数的和
int add(int a, int b);
#endif
```
2. 创建一个源文件 `mylib.c`,实现需要导出的函数:
```c
#include "mylib.h"
int add(int a, int b) {
return a + b;
}
```
3. 编译生成动态库文件 `mylib.so`,注意需要使用 `-shared` 选项生成动态库:
```sh
gcc -shared -fPIC mylib.c -o mylib.so
```
4. 创建一个使用动态库的程序 `main.c`,包含头文件并调用动态库中的函数:
```c
#include <stdio.h>
#include <dlfcn.h>
#include "mylib.h"
int main() {
// 动态链接库句柄
void* handle = dlopen("./mylib.so", RTLD_LAZY);
if (handle == NULL) {
printf("Failed to open library: %s\n", dlerror());
return 1;
}
// 加载库中的函数
int (*add_func)(int, int);
add_func = (int (*)(int, int)) dlsym(handle, "add");
if (add_func == NULL) {
printf("Failed to get symbol: %s\n", dlerror());
dlclose(handle);
return 1;
}
// 调用库中函数
int result = add_func(1, 2);
printf("Result: %d\n", result);
// 卸载动态库
dlclose(handle);
return 0;
}
```
5. 编译 `main.c` 并运行程序:
```sh
gcc main.c -o main -ldl
./main
```
输出结果为:
```
Result: 3
```
这个例子中,我们实现了一个简单的动态库并在程序中调用了其中的函数。需要注意的是,使用动态库需要在程序中手动加载和卸载动态库,并使用 `dlsym` 函数获取动态库中的函数地址。
阅读全文