【问题标题】:Problem loading pre-built library via Android NDK通过 Android NDK 加载预构建库时出现问题
【发布时间】:2011-10-20 06:21:46
【问题描述】:

我正在尝试将第三方库添加到我的 Android 应用中。它使用 .jar 文件和 .so 文件。这是一个预构建的 .so 文件(即不是专门为 Android 应用构建的)——我知道这会给我带来很多问题。我无权访问 .jar 或 .so 文件的源文件!

我正在尝试通过调用 System.loadLibrary("foo"); 来动态加载库。目前,当尝试运行应用程序时,它会因 UnsatisfiedLinkError: Library foo not found 而崩溃。我的项目中的 libs/ 和 libs/armeabi 文件中都有 .so 文件。

我是在追鬼吗?我正在尝试确定我所追求的是否可行。我没有要引用的本机代码 - 我的所有函数调用都是对 .jar 文件的,据我所知,它由 .so 文件支持。我没有运行 Android.mk 文件,因为我没有编译任何东西 - .so 文件已经提供。对于从这里开始的方向,我真的可以使用一些建议。

【问题讨论】:

标签: android android-ndk


【解决方案1】:

赋予 System.loadLibrary() 的基本名称可能会扩展为与实际预构建库不同的文件(或路径)名称。 Logcat 应该准确地向您显示它正在尝试加载的内容。您也可以使用带有完整路径/文件名的 System.load() 而不是 System.loadLibrary() - 尽管您确实应该使用后者。

虽然我认为它会生成不同的错误消息,但 .so 也可能与 android 不兼容 - 它不仅必须适用于兼容的处理器类型和 abi,​​而且不依赖于任何动态库(例如非仿生 libc) 未安装在设备上。

【讨论】:

  • 这绝对是可能的。我认为您对 .so 不兼容是正确的。据我所知,它甚至可能与 JNI 不兼容!我对此进行了大量阅读,我相信最终,除非您使用 ndk-build 脚本专门为 Android 构建源文件,否则它根本行不通。
  • @BigJim 我确实认为值得更详细地研究 - 转储 .so 的依赖项,验证它实际上是否已安装,并尝试显式路径。至少这将是一种教育体验。
猜你喜欢
  • 1970-01-01
  • 2011-06-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多