C ++库必须从磁盘读取文件,该磁盘位于与库相同的目录中。我不知道这个问题是否是微不足道的,或者是否是不可能的:图书馆如何确定自己在磁盘上的路径?该解决方案适用于Linux( .so)和Windows( .dll)。
答案 0 :(得分:1)
虽然您描述的任务通常以不同的方式解决,但这里是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!");
}
此处使用dladdr确定puts
函数的来源。
对于Windows,请参阅this recipe
当我告诉任务解决不同时,我的意思是以下内容。在Linux(以及类似于unix的系统&#34;)中,共享库与其他应用程序数据分开。 (前者位于/lib
,/lib64
,/usr/lib
或/usr/lib64
,具体取决于目标平台,&#34;特定图书馆的重要性以及其他因素,后者通常会转到/usr/share/<appname>
)。这是图书馆获得帮助的途径。应用程序数据文件的路径通常在编译期间配置,有时 - 通过应用程序配置中的专用设置。
对于那些&#34;第三方&#34;旨在安装到/opt/
或其他特殊位置的应用程序&#34;,如/usr/local
应用程序数据的路径是从应用程序的路径计算的,而应用程序的路径通常是从应用程序二进制位置确定,这是从main()
参数中已知的。当然,您的情况可能需要特殊的布局,但要记住这些注意事项是有用的。
答案 1 :(得分:0)