c - 如何在运行时打印 .so 文件位置?
问题描述
在 foo.c
void location(char *path)
{
//to do
}
在 main.c
int main()
{
char foopath[256];
location(foopath);
printf("%s\n",foopath);
}
也许它会显示/lib/foo.so
我想我可以使用 ldd 之类的 shell 脚本来获取路径,但它似乎并不漂亮。
我想读取与foo.so
. 所以我需要正确的路径。
解决方案
您可以使用“dl”库。显示“fopen”符号的动态库文件名称的程序示例:
#define _GNU_SOURCE
#include <dlfcn.h>
#include <stdio.h>
int main(void)
{
int rc;
Dl_info info;
rc = dladdr(fopen, &info);
if (rc) {
printf("%s\n", info.dli_fname);
return 0;
}
return 1;
}
$ gcc example.c -l dl
$ ./a.out
/lib/x86_64-linux-gnu/libc.so.6
推荐阅读
- flutter - 如何使用 SearchDelegate 在 Flutter 中显示最近的搜索历史?
- r - 试图将数据强制转换为高斯曲线,结果不如预期
- ssl - 来自 Https Angular 6 App 的 Http WebAPI 调用,SSL 无法在 IIS 中托管
- docker - 从 docker 容器中使用默认命名空间中的集群 IP 访问 k8s 服务
- php - PHP 组表
- linux - 有没有办法可靠地检查 systemd 是否支持 --user?
- java - de.hybris.platform.impex.jalo.ImpExException[HY--1] Hybris ImpEx 中的异常
- javascript - 接收不同字符集中的字符串并在屏幕上显示
- jestjs - 如何使用 jest 测试 HttpService.Post 调用
- php - 雄辩的关系 Laravel 将多个表连接在一起