确定共享库的目录

时间:2012-12-11 11:15:15

标签: c shared-libraries

任何人都可以告诉我,在Windows和Linux平台上是否有办法从共享库中的函数调用中确定共享库文件的位置。我有一个用C编写的共享库,它将在linux和windows下编译和运行。我希望能够通过函数确定共享库的当前位置,以便我可以确定某些配置和其他文件的位置。

我已经找到了这样做的方法,但我现在找不到任何答案,虽然我确信我曾经看过一篇文章,告诉我们如何以平台特定的方式做到这一点。

1 个答案:

答案 0 :(得分:1)

在Windows上,您可以使用GetModuleFileName()获取DLL的完整路径:

char path[MAX_PATH];
if (GetModuleFileName(GetModuleHandle("kernel32.dll"), path, MAX_PATH) &&
    ERROR_INSUFFICIENT_BUFFER != GetLastError())
{
    char* last_slash = strrchr(path, '\\');
    if (last_slash) *last_slash = 0;
    printf("path=[%s]\n", path);
}

输出:

  

路径= [C:\窗口\ system32]