linux 查看所有打开so档的进程

该博客主要围绕Linux系统展开,核心内容是如何查看所有打开so档的进程,涉及Linux系统下对进程和so档的相关操作,属于信息技术中操作系统领域的内容。
### Linux 动态加载 SO 库的详细过程 在 Linux 中,动态加载共享对象(SO 文件)通常通过 `dlopen` 函数来实现。此函数允许程序在运行时打开并访问共享库文件。 #### 使用 dlopen 加载共享库 当调用 `dlopen` 来加载一个 `.so` 文件时,该函数会返回指向已加载库的一个句柄。如果失败,则返回 NULL 并设置错误信息[^5]。 ```c void* handle; handle = dlopen("./libexample.so", RTLD_LAZY); if (!handle) { fprintf(stderr, "%s\n", dlerror()); } ``` 这里展示了如何处理可能发生的错误情况,并打印出错原因。 #### 获取符号地址 一旦成功打开了共享库,就可以使用 `dlsym` 函数获取特定符号(通常是函数名或变量名)对应的内存地址: ```c int (*func)(const char*); *(void **)(&func) = dlsym(handle, "function_name"); char *error; if ((error = dlerror()) != NULL) { fprintf(stderr, "%s\n", error); } ``` 这段代码尝试检索名为 `"function_name"` 的函数指针;同样地,在遇到问题时提供反馈。 #### 关闭共享库连接 完成操作之后应当调用 `dlclose` 来关闭与共享库之间的联系,释放资源: ```c dlclose(handle); ``` 这一步骤对于防止内存泄漏非常重要。 #### 设置环境变量 LD_LIBRARY_PATH 为了让应用程序能够找到自定义路径下的 .so 文件,可以在启动前临时修改 `LD_LIBRARY_PATH` 环境变量或将新位置加入到 `/etc/ld.so.conf.d/` 下配置文件中以便永久生效[^3]。 例如: ```bash export LD_LIBRARY_PATH=/path/to/libs:$LD_LIBRARY_PATH ``` 这样做的目的是让动态链接器知道去哪里查找所需的依赖项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Farmwang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值