链接动态库例子
时间: 2023-06-29 19:06:11 浏览: 104
下面是一个链接动态库的简单示例:
假设我们有一个名为 `libfoo.so` 的动态库,其中包含一个名为 `foo` 的函数,它接受一个整数参数并返回一个整数。
要使用这个库,我们需要创建一个名为 `test.c` 的源文件,并在其中声明我们要使用的函数:
```c
#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>
int main() {
void *handle;
int (*foo)(int);
char *error;
// 打开动态库
handle = dlopen("libfoo.so", RTLD_LAZY);
if (!handle) {
fprintf(stderr, "%s\n", dlerror());
exit(EXIT_FAILURE);
}
// 获取函数指针
foo = dlsym(handle, "foo");
if ((error = dlerror()) != NULL) {
fprintf(stderr, "%s\n", error);
exit(EXIT_FAILURE);
}
// 调用函数
printf("%d\n", (*foo)(42));
// 关闭动态库
dlclose(handle);
return 0;
}
```
编译这个程序时,需要将 `libfoo.so` 链接到可执行文件中。可以使用以下命令进行编译和链接:
```bash
gcc -o test test.c -ldl
```
这将生成一个名为 `test` 的可执行文件。运行它时,它将打开 `libfoo.so` 动态库,获取 `foo` 函数的指针,并调用它。最后,它将关闭动态库并退出。
阅读全文