android mupdf libmupdf.so runtime error “No implementation found for native openFile”-Collection of common programming errors
I just finished compiling mupdf from mupdf.com on my mac. Took some time to figure it out but now I have a libmupdf.so in my libs/armeabi folder.
They provide an example of this class called MuPDFCore.java which is viewable here: http://mupdf.com/repos/mupdf/android/src/com/artifex/mupdf/MuPDFCore.java
I used this class in my project and it says the following in LogCat:
Trying to load lib /data/data/com.myapp.android/lib/libmupdf.so 0x4070e050
Added shared lib /data/data/com.myapp.android/lib/libmupdf.so 0x4070e050
No JNI_OnLoad found in /data/data/com.myapp.android/lib/libmupdf.so 0x4070e050, skipping init
No implementation found for native Lcom/myapp/android/viewer/MuPDFCore;.openFile (Ljava/lang/String;)I
DEBUG/AndroidRuntime(27523): Shutting down VM
WARN/dalvikvm(27523): threadid=1: thread exiting with uncaught exception (group=0x400ee760)
ERROR/AndroidRuntime(27523): FATAL EXCEPTION: main
ERROR/AndroidRuntime(27523): java.lang.UnsatisfiedLinkError: openFile
As far as I know the library is loading, before I figured out how to compile the library it kept crashing and saying the “mupdf” is a null link.
Their example pretty much says that openFile is a native function … Just when I thought I figured this out another problem pops up. Ive been working on it all day. Any input would be great!
Is it a bad compile? I didn’t get any errors in the terminal.
-
I too was able to build the mupdf library. I got it working on the emulator. I have an app. that uses the mupdf library to save jpg files to the sdcard.
This works on the emulator as well as on a Android 2.2 device API level 8 (LG Optimus). However, when run on the Samsung Galaxy S (Android 2.1-update1 API level 7), I’m getting the error :
ERROR/AndroidRuntime(8715): Caused by: java.lang.UnsatisfiedLinkError: Library mupdf not found
I used the ndk: android-ndk-r5b
Any ideas on what might be causing the error?!?!
-
I think you didn’t change the your function names in mupdf.c to your corresponding java package name, that means, you should change the function Java_com_artifex_mupdf_MuPDFCore_openFile in your mupdf.c to Java_com_myapp_android_viewer_openFile.
-
At file mupdf.c L18-19:
#define JNI_FN(A) Java_com_artifex_mupdfdemo_ ## A #define PACKAGENAME "com/artifex/mupdfdemo"
Change both to your package name.