【发布时间】:2019-06-23 22:32:14
【问题描述】:
我正在为 Libretro 框架构建一个库,并且我想获取我的库的路径,以便我可以在与我的 library.so 文件相同的目录中打开一个文件。
我按照How to implement readlink to find the path 的说明进行操作,但这只是为我提供了调用我的库的可执行文件的路径。
【问题讨论】:
标签: c++ shared-libraries libretro
我正在为 Libretro 框架构建一个库,并且我想获取我的库的路径,以便我可以在与我的 library.so 文件相同的目录中打开一个文件。
我按照How to implement readlink to find the path 的说明进行操作,但这只是为我提供了调用我的库的可执行文件的路径。
【问题讨论】:
标签: c++ shared-libraries libretro
在 Linux 上,使用 Glibc 扩展 dladdr()。
#include <dlfcn.h>
std::string get_library_path() {
Dl_info dl_info;
if(0 != dladdr((void*)get_library_path, &dl_info))
return std::string(dl_info.dli_fname);
else
return std::string();
}
在 Windows 上,等效为 GetModuleFileName()
【讨论】:
dladdr() 出错时返回 0,成功时返回非零值。 Grr。编辑代码示例以反转错误检查。