gpt4 book ai didi

c++ - 在运行时确定* .dll或* .so的路径

转载 作者:行者123 更新时间:2023-12-02 10:08:51 26 4
gpt4 key购买 nike

C++库必须从与库位于同一目录的磁盘读取文件。我不知道这个问题是琐碎的还是不可能的:该库如何确定其在磁盘上的路径?该解决方案应适用于Linux(.so)和Windows(.dll)。

最佳答案

尽管您描述的任务通常以不同的方式解决,但这是Linux的解决方案:

#define _GNU_SOURCE
#include <stdio.h>
#include <dlfcn.h>

void foo() {
Dl_info dlInfo;
dladdr(puts, &dlInfo);
if (dlInfo.dli_sname != NULL && dlInfo.dli_saddr != NULL)
printf("puts is loaded from %s\n", dlInfo.dli_fname);
else
printf("It's strange but puts is not found\n");
puts("Hello, world! I'm foo!");
}

此处 puts函数的来源是使用 dladdr确定的。

对于Windows,请参见 this recipe

当我告诉我任务以不同的方式解决时,我的意思是。在Linux(和其他“典型的类unix系统”)中,共享库与其余“应用程序数据”(前者驻留在 /lib/lib64/usr/lib/usr/lib64中)分开,具体取决于目标平台,“特定库的重要性”和其他因素,后者通常转到 /usr/share/<appname>)。那是图书馆的道路对您没有帮助。通常在编译期间配置应用程序数据文件的路径,有时-通过应用程序配置中的专用设置。

对于打算安装到 /opt/或其他“特殊位置”的那些“第三方”应用程序,例如 /usr/local,应用程序数据的路径是根据应用程序的路径计算得出的,而该路径通常是根据应用程序的二进制位置确定的,可以从 main()参数中得知。当然,您的案例可能需要特殊的布局,但是记住这些注意事项很有用。

关于c++ - 在运行时确定* .dll或* .so的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27886269/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com