Search code examples
javalinuxtesseracttess4j

Running tess4j (tessreact java wrapper) under Linux


On linux server tesseract 3.0.2 libraries were correctly installed:

[root@XXX as]# rpm -qa | grep ".*tess.*"
tesseract-3.02-alt1.r723

When trying to run tess4j wrapper, got this exception:

Exception in thread "main" java.lang.UnsatisfiedLinkError: Error looking up function 'TessBaseAPICreate': /usr/lib64/libtesseract.so.3.0.2: undefined symbol: TessBaseAPICreate
        at com.sun.jna.Function.<init>(Function.java:208)
        at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:536)
        at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:513)
        at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:499)
        at com.sun.jna.Library$Handler.invoke(Library.java:199)
        at com.sun.proxy.$Proxy0.TessBaseAPICreate(Unknown Source)
        at net.sourceforge.tess4j.Tesseract.init(Tesseract.java:284)
        at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:219)
        at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:200)
        at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:184)
        (... private code ...)

Mentioned in exception file exists:

[root@XXX as]# test -e /usr/lib64/libtesseract.so.3.0.2  && echo "Found" || echo "Not found"
Found

The place in tess4j code, which throws the exception looks like:

/**
 * Initializes Tesseract engine.
 */
private void init() {
    pageNum = 0;
    api = TessAPI.INSTANCE;
    handle = api.TessBaseAPICreate();  // ERROR HERE, line #184
    api.TessBaseAPIInit2(handle, datapath, language, ocrEngineMode);
    api.TessBaseAPISetPageSegMode(handle, psm);
}

I have no idea, how to solve it, because all libraries versions are same, it works perfectly under windows.


Solution

  • Well, this was particular problem with that package in used OS ("ALT Linux Centaurus 6.0"). After rebuilding tesseract package from sources under that OS everything became OK.