【问题标题】:dlopen fails on android with NDK 10ddlopen 在带有 NDK 10d 的 android 上失败
【发布时间】:2015-03-13 16:29:09
【问题描述】:

我正在尝试使用 System.loadLibrary 打开一个 dll

 System.loadLibrary("myLib");

找到并加载了该库,但它因 UnsatisfiedLinkError 而崩溃

E/AndroidRuntime(5557): java.lang.UnsatisfiedLinkError: dlopen 失败: 找不到“libmyLib.so”引用的符号“pow”...

我认为 gcc 隐式链接到 libc 和 libm...

  • 我尝试手动链接它,但没有成功。
  • 我尝试链接到 gnustl_shared。

我错过了什么吗?

谢谢

【问题讨论】:

  • 发给你Android.mkApplication.mk
  • 在不确定它是否适用于这种特殊情况的情况下,值得一提的是,存在许多此类回归问题,其中仿生在将事物实现为宏和库函数之间切换。如果您使用将其视为库函数的工具链进行构建,并在假定它应该是宏的设备上运行,您将遇到这种失败。您可以尝试比较新 NDK 和旧版本的标头。
  • 另一种可能是您不小心包含了开发系统中的标头而不是 Android NDK 标头。

标签: java android c++ android-ndk


【解决方案1】:

您是如何尝试手动链接的?您是否尝试使用 cmath/math.h 中的 double pow(double, double) ?您在编译期间没有收到任何警告吗?

通常,将其添加到您的 Android.mk

LOCAL_LDLIBS += -lm

应该将您的源正确链接到 NDK 的 libm.so

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 2019-12-26
    • 1970-01-01
    • 2016-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多