【问题标题】:Determine the directory of a shared library确定共享库的目录
【发布时间】:2012-12-11 19:29:23
【问题描述】:

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

我已经在寻找方法来做到这一点,但我现在找不到任何答案,尽管我确信我曾经看过一篇文章,讲述了如何以特定于平台的方式做到这一点。

【问题讨论】:

  • 更新。似乎在 linux 上 addr 函数是要走的路。我会试试这个,但是否有任何 Windows 等效项。

标签: c shared-libraries


【解决方案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:\WINDOWS\system32]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多