谁能告诉我是否有办法在 Windows 和 linux 平台上从共享库中的函数调用中确定共享库文件的位置。我有一个用 C 编写的共享库,它将在 linux 和 windows 下编译和运行。我希望能够通过函数确定共享库的当前位置,以便确定某些配置和其他文件的位置。
我已经在寻找方法来做到这一点,但我现在找不到任何答案,尽管我确信我曾经看过一篇文章,其中讲述了如何以特定于平台的方式做到这一点。
谁能告诉我是否有办法在 Windows 和 linux 平台上从共享库中的函数调用中确定共享库文件的位置。我有一个用 C 编写的共享库,它将在 linux 和 windows 下编译和运行。我希望能够通过函数确定共享库的当前位置,以便确定某些配置和其他文件的位置。
我已经在寻找方法来做到这一点,但我现在找不到任何答案,尽管我确信我曾经看过一篇文章,其中讲述了如何以特定于平台的方式做到这一点。
在 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]