【问题标题】:Compiled JNI library (libmupdf.so), working fine for android 2.2 & Android emulator, but failing on android 2.1编译的 JNI 库 (libmupdf.so),适用于 android 2.2 和 Android 模拟器,但在 android 2.1 上失败
【发布时间】:2011-07-18 01:32:18
【问题描述】:

我能够为 android (libmupdf.so) 构建 mupdf 库,并让它在模拟器上运行。我用过 ndk:android-ndk-r5b 和 android-ndk-r4b,都可以正常工作。

我有一个应用程序。调用 mupdf 库读取 PDF 并将其作为 jpg 文件保存到 sdcard。

这在模拟器(2.1 和 2.2) 以及 Android 2.2 设备 API 级别 8(LG Optimus)上运行良好。

但是,在 Samsung Galaxy S(Android 2.1-update1 API 级别 7) 上,应用可以正常安装,但在运行时出现错误:

ERROR/AndroidRuntime: 原因: java.lang.UnsatisfiedLinkError: 找不到库 mupdf

我尝试使用 ndk-r5b 以及 prev 构建库。版本 - ndk-r4、ndk-3 和 ndk-r4b。好像没什么变化:(

关于什么可能导致错误的任何想法?!?!任何建议/帮助表示赞赏。

【问题讨论】:

  • hii @Roy Samuel 我在制作 libmupdf.so 文件时遇到问题,当我从 CMD D:/android-ndk-r8/mupdf-1.0-source/android 编译代码时它给了我错误//jni/mupdf.c:195: error: 'ctm' undecl ared (第一次在这个函数中使用) D:/android-ndk-r8/mupdf-1.0-source/android//jni/mupdf.c:195: error: 'currentMedi abox' undeclared (first use in this function) 你能帮我解决这个错误吗?谢谢
  • 我认为您还没有包含 mupdf 的所有相关头文件。浏览项目 src,并确定包含所有头文件。这是我看到此错误的唯一原因。
  • 但是我可以从 Mupdf 网站下载该项目,那么如果是这样的话,一些文件怎么可能丢失,那么你能建议我从哪里获得完整代码的任何好的教程。
  • 在编译 mupdf 库时,有来自其他独立项目的源代码,如 libjpeg,一些字体支持包等。我已经独立获得了这些项目的源代码,当我发现存在差异时,如你提到的错误。尝试查找这些软件包的来源,如果找到,请在此处发布。我可以尝试帮助寻找来源,但目前我处于另一个“背景”中,可以这么说。

标签: android android-emulator java-native-interface shared-libraries android-ndk


【解决方案1】:

Dalvik JNI Tips 文档中有一些建议。首先要做的是查看异常上方的 logcat 输出,看看是否有 dlopen() 诊断。

【讨论】:

  • 哎呀,几年前就坏了。该文档现在位于 Android 开发者网站上。链接已更新。
【解决方案2】:

mupdf 构建文件 - Android.mk 包含一个不需要的库“jnigraphics”。

链接此库并在 Android 2.2 设备或模拟器(2.2 或 2.1)上运行不会导致任何问题。 但是,如果包含此库然后在 Android 2.1 设备上运行,(我使用的是 Galaxy SI9000 Android 2.1-update1)会导致 Android 运行时错误,“找不到库 mupdf”。

【讨论】:

  • 嗨,你能帮我吗?我无法编译 mupdf 库
  • 嗨 TOX1C,你卡在哪里了?给我一个适当的描述你的问题,我可以尝试帮助你。
  • 嗨,roy,谢谢,我解决了这个问题并成功编译了库,但是用于显示 pdf 的小部件非常不专业,它在触摸事件时会抖动我想知道您使用了默认视图还是创建了自定义视图
  • 哦,太好了!对于我的用例,我不使用小部件,而是将 pdf 呈现为 JPG 并将它们缩放为“可绘制”。所以是的,我使用了默认视图本身,并渲染了图像。您正在使用的小部件是什么?
  • 我也使用了相同的方法,我有一个自定义缩放 Imageview,我也在显示图像,但问题是一旦你缩放图像,PDF 的质量就无法保持,这就是使用的目的PDF 渲染器,这是我的电子邮件 id ingsaurabh@gmail.com 我想我们可以讨论它以使其更漂亮和可用的 PDF 渲染器
【解决方案3】:

mupdf 构建文件 - Android.mk 包括一个图书馆“jnigraphics”,其中 不是必需的。

链接这个库并运行 Android 2.2 设备或模拟器 (2.2 或 2.1)不会导致任何 问题。但是,如果这个库是 包含,然后在 Android 上运行 2.1 设备,(我使用的是 Galaxy SI9000 Android 2.1-update1)导致 Android 运行时错误,'库 mupdf 不是 找到”。

在 Android.mk 文件中,有一个被链接的库,名为 - 'libjnigraphics'。删除对此的引用后,我能够为 Galaxy SI9000 Android 2.1-update1 构建。

【讨论】:

  • 嗨。我陷入了同样的境地。你能帮我如何删除参考。我不知道怎么做。我删除了 Android.mk 中的行,但它仍然在 2.1 上崩溃,找不到库但在 2.2 上完美运行
【解决方案4】:

我在 Android 2.1-update1 设备(尤其是三星 Galaxy I9000)上使用 android-ndk-r5b 加载 JNI 库时遇到问题,在 Android 2.2/2.3 上它运行良好。使用 android-ndk-r7 给了我一些编译问题,但是在我将 NDK 更新到版本 android-ndk-r5c 之后 - 我的原生库在 Android 2.1-update1/2.2/2.3 设备上完美运行。

【讨论】:

    猜你喜欢
    • 2011-04-15
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多