支持dlopen flag RTLD_GLOBAL

时间:2013-05-23 14:37:38

标签: android-ndk

我使用

加载包含名为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标志吗?

1 个答案:

答案 0 :(得分:1)

在已加载的库中搜索符号或运行程序 不需要为这个RTLD_DEFAULT使用dlopen有特殊的伪句柄,试试这个


void * pSymbolGlobal = dlsym(RTLD_DEFAULT," foo1");

请参阅dlsym手册页以获取更多信息