首页 > 解决方案 > 如何在运行时打印 .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. 所以我需要正确的路径。

标签: clinuxshared-librariesdynamic-linking

解决方案


您可以使用“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

推荐阅读