如何解决是否有一种定义规则适用于在运行时动态加载共享库?
如果在运行时使用Unix上的dlopen()或Windows上的LoadLibrary()在运行时加载dll或类似的库,我是否需要确保该库中的符号名称与程序中的符号名称不同?还可以加载定义相同功能的多个共享库吗?
编辑:我专门询问运行时动态链接。
解决方法
由dlopen
加载的共享库中的对象未出现在主程序的名称空间中。您需要使用对象名称作为字符串调用dlsym
,以获得指向它的指针。
以您的示例为例,该示例具有两个具有相同名称的全局变量的动态加载的库:
void *lib1 = dlopen("lib1.so",RTLD_LAZY);
int *lib1_global1 = dlsym(lib1,"global1");
void *lib2 = dlopen("lib2.so",RTLD_LAZY);
int *lib2_global1 = dlsym(lib2,"global1");
在此,lib1.so和lib2.so都包含名为int
的类型global1
的全局变量。由于dlsym
函数返回指向相关变量/函数的指针,因此您可以无冲突地处理这种情况。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。