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