我使用
加载包含名为mylib.so
的函数的共享对象foo1
void* pHandleLocal = dlopen( "mylib.so", RTLD_LAZY | RTLD_GLOBAL );
我尝试查找符号
void* pSymbol = dlsym( pHandleLocal, "foo1" );
工作正常。 之后,我尝试在主程序的全局范围内查找符号。
void* pHandleGlobal = dlopen( NULL, RTLD_LAZY | RTLD_GLOBAL );
void* pSymbolGlobal = dlsym( pHandleGlobal, "foo1" );
找不到符号(在Linux上,两个符号地址相等)。 android dlopen实现不支持RTLD_GLOBAL标志吗?
答案 0 :(得分:1)
在已加载的库中搜索符号或运行程序 不需要为这个RTLD_DEFAULT使用dlopen有特殊的伪句柄,试试这个
void * pSymbolGlobal = dlsym(RTLD_DEFAULT," foo1");
请参阅dlsym手册页以获取更多信息