Aar*_*ing 5 c c++ dll loadlibrary one-definition-rule
如果我在运行时使用 unix 上的 dlopen() 或 Windows 上的 LoadLibrary() 加载 dll 或 so 库,我是否需要确保库中的符号与程序中的符号名称不同?另外是否可以加载定义相同函数的多个共享库?
编辑:我特别询问运行时动态链接。
加载的共享库中的对象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");
Run Code Online (Sandbox Code Playgroud)
int这里,lib1.so 和 lib2.so 都包含一个名为类型的全局变量global1。因为该dlsym函数返回指向相关变量/函数的指针,所以您可以处理这种情况而不会发生冲突。
| 归档时间: |
|
| 查看次数: |
637 次 |
| 最近记录: |