问题描述
在foo.c
void location(char *path)
{
//to do
}
在main.c
int main()
{
char foopath[256];
location(foopath);
printf("%s\n",foopath);
}
我想我可以使用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