1

我加载了一个mylib.so包含名为foo1using的函数的共享对象

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 吗?

4

1 回答 1

1

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


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

有关更多信息,请参阅dlsym手册页

于 2015-07-01T14:36:41.090 回答