在成功返回dlopen后,dlsym返回符号在android中找不到

时间:2010-11-02 12:09:01

标签: android linux

我从另一个加载一个共享库。让我们说来自foo1.so的foo2.so

我正在使用dlopen,然后使用dlsym

dlopen成功使用正确的句柄,但dlsym返回“找不到符号”错误。我使用dlerror打印错误。

这些是我尝试的东西。在foo2.so .mk文件中我添加了 LOCAL_LDFLAGS + = -Wl, - export-dynamic。

我使用nm检查了foo2.so中的符号,它就在那里。

两个模块都在C中,除了foo1.so中的一个包装文件,它在C ++中,调用文件在C中。

任何人都可以建议我是否错过任何事情。我在froyo上的android模拟器上运行它。

1 个答案:

答案 0 :(得分:0)

我很想在实施层面找一看并验证一切。查看/ proc / PID#/ maps并确保加载两个库。

objdump调用者和被调用者并确保C ++位没有破坏名称。

您使用的是合适的RTLD_标志,dlsym是否获得了dlopen返回的有效句柄?

你可以为桌面linux或cygwin构建(简化版)两个库并测试可执行文件,以确保你想要做的事情通常是可行的 - 即问题是特定于android的吗?