我从另一个加载一个共享库。让我们说来自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模拟器上运行它。
答案 0 :(得分:0)
我很想在实施层面找一看并验证一切。查看/ proc / PID#/ maps并确保加载两个库。
objdump调用者和被调用者并确保C ++位没有破坏名称。
您使用的是合适的RTLD_标志,dlsym是否获得了dlopen返回的有效句柄?
你可以为桌面linux或cygwin构建(简化版)两个库并测试可执行文件,以确保你想要做的事情通常是可行的 - 即问题是特定于android的吗?