1

I checked out coolreader 3 from git repository http://sourceforge.net/projects/crengine/. I try to build it in eclipse, but when running it crashes with the following error:

The application Cool Reader (process.org.coolreader) has stopped unexpectedly. Please try again.

Here is the red part from logcat:

 08-27 02:54:24.553: ERROR/AndroidRuntime(223): Uncaught handler: thread BackgroundThread44c32540 exiting due to uncaught exception 08-27 02:54:24.583: ERROR/AndroidRuntime(223): java.lang.UnsatisfiedLinkError: Library cr3engine-45-15 not found 08-27 02:54:24.583: ERROR/AndroidRuntime(223): at java.lang.Runtime.loadLibrary(Runtime.java:489) 08-27 02:54:24.583: ERROR/AndroidRuntime(223): at java.lang.System.loadLibrary(System.java:557) 08-27 02:54:24.583: ERROR/AndroidRuntime(223): at org.coolreader.crengine.Engine.installLibrary(Engine.java:837) 08-27 02:54:24.583: ERROR/AndroidRuntime(223): at org.coolreader.crengine.Engine.init(Engine.java:745) 08-27 02:54:24.583: ERROR/AndroidRuntime(223): at org.coolreader.crengine.Engine.access$10(Engine.java:742) 08-27 02:54:24.583: ERROR/AndroidRuntime(223): at org.coolreader.crengine.Engine$4.run(Engine.java:565) 08-27 02:54:24.583: ERROR/AndroidRuntime(223): at android.os.Handler.handleCallback(Handler.java:587) 08-27 02:54:24.583: ERROR/AndroidRuntime(223): at android.os.Handler.dispatchMessage(Handler.java:92) 08-27 02:54:24.583: ERROR/AndroidRuntime(223): at android.os.Looper.loop(Looper.java:123) 08-27 02:54:24.583: ERROR/AndroidRuntime(223): at org.coolreader.crengine.BackgroundThread.run(BackgroundThread.java:120) 

and this is the function org.coolreader.crengine.Engine.installLibrary:

private void installLibrary() { try { if (force_install_library) throw new Exception("forcing install"); // try loading library w/o manual installation log.i("trying to load library " + LIBRARY_NAME + " w/o installation"); System.loadLibrary(LIBRARY_NAME); // try invoke native method //log.i("trying execute native method "); //setHyphenationMethod(HYPH_NONE, new byte[] {}); log.i(LIBRARY_NAME + " loaded successfully"); } catch (Exception ee) { log.i(SO_NAME + " not found using standard paths, will install manually"); File sopath = mActivity.getDir("libs", Context.MODE_PRIVATE); File soname = new File(sopath, SO_NAME); try { sopath.mkdirs(); File zip = new File(mActivity.getPackageCodePath()); ZipFile zipfile = new ZipFile(zip); ZipEntry zipentry = zipfile.getEntry("lib/armeabi/" + SO_NAME); if (!soname.exists() || zipentry.getSize() != soname.length()) { InputStream is = zipfile.getInputStream(zipentry); OutputStream os = new FileOutputStream(soname); Log.i("cr3", "Installing JNI library " + soname.getAbsolutePath()); final int BUF_SIZE = 0x10000; byte[] buf = new byte[BUF_SIZE]; int n; while ((n = is.read(buf)) > 0) os.write(buf, 0, n); is.close(); os.close(); } else { log.i("JNI library " + soname.getAbsolutePath() + " is up to date"); } System.load(soname.getAbsolutePath()); //setHyphenationMethod(HYPH_NONE, new byte[] {}); } catch (Exception e) { log.e("cannot install " + LIBRARY_NAME + " library", e); } } } 

The line 837 in engine.java:

 System.loadLibrary(LIBRARY_NAME);

LIBRARY_NAME in engine.java is set by:

 static final private String LIBRARY_NAME = "cr3engine-45-15";

Since I downloaded the code from repository it is supposed to work without any modifications. I don't understand why it's not working.

1 Answer 1

1

Those are not standard names, as they lack the lib prefix.

System.loadLibrary("lept"); System.loadLibrary("tess"); 

This is causes search for liblept.so which is not the file you have. Either give your library the standard name, or specify an actual file name including the path where it ends up installed on the device to

System.load(("lept") //rather than System.loadLibrary(). 

if it's unsatisfiedlink error then Without seeing your code just only assumption is your code trying to load shared library liblept.so and the library is not available at that path. Also the code you are using is either have that liblept.so file in any lib or internal package directory or you have to generate (build) that shared library by using Android-NDK try following tutorial1 , tutorial2

Sign up to request clarification or add additional context in comments.

1 Comment

Thanks. I asked this question 4 years ago while working on something. Ever since I haven't been programming android until recently. Thanks anyway it seems helpful. Also I like to read the tutorials mentioned.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.