Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Tess4j unsatisfied link error on mac OS X

Tags:

java

tesseract

Hey i am trying to use tess4j for tesseract and having this issue for eclipse on mac osx .

My tesseract is working fine from terminal but trying to run tess4j through tesseract throws me an error .

java.lang.UnsatisfiedLinkError: Unable to load library 'tesseract': Native library (darwin/libtesseract.dylib)

i do have tessetact dylib and its named libtesseract.dylib in my opt/local/lib which i installed using macport .

Thanks for your help

like image 277
nestrocuation Avatar asked Jan 28 '14 00:01

nestrocuation


3 Answers

I know it's an old post. I had this problem too recently when I tried to use Tess4J. However, I managed to find a way around it. I've written a post about it http://www.microshell.com/programming/java/performing-optical-character-recognition-in-java/

In short, the problem is because tess4j-2.0.0.jar doesn't include MacOS library. So I just modified the maven cached jar on mine by doing these steps:

  1. cd /Users/user/.m2/repository/net/sourceforge/tess4j/tess4j/2.0.0 (adjust the directory where your tess4j JAR file resides)
  2. mkdir darwin
  3. jar uf tess4j-2.0.0.jar darwin
  4. cp /opt/local/lib/libtesseract.3.dylib darwin/libtesseract.dylib
  5. jar uf tess4j-2.0.0.jar darwin/libtesseract.dylib
  6. jar tf tess4j-2.0.0.jar (to verify that the file is included)

I was then able to run my Java program after I modify the tess4j-2.0.0.jar file. Below is my MacOS version.

user@laptop:~$ uname -a
Darwin Maresas-MacBook-Pro.local 14.3.0 Darwin Kernel Version 14.3.0: Mon Mar 23 11:59:05 PDT 2015; root:xnu-2782.20.48~5/RELEASE_X86_64 x86_64
like image 179
maresa Avatar answered Sep 21 '22 14:09

maresa


I had a very similar issue with Ghost4j, i.e.

InvocationTargetException: Unable to load library 'gs': Native library (darwin/libgs.dylib) not found in resource path

Instead of modifying jar files, point jna to the appropriate lib path by setting jna.library.path. In Eclipse, you need to set the system property in run configurations - SO answer for this here - https://stackoverflow.com/a/862405/2163229

If you're using Maven exec:

mvn -Djna.library.path=/opt/local/lib/ exec:java -Dexec.mainClass="foo.bar.NativeThingy"

or

export MAVEN_OPTS="-Djna.library.path=/opt/local/lib/" && mvn exec:java -Dexec.mainClass="foo.bar.NativeThingy"

Obviously, set the path to wherever your libs are installed. In my case, I ran $ locate libgs.dylib and found the above path.

References: https://jna.java.net/javadoc/com/sun/jna/NativeLibrary.html

like image 27
Michael Miklavcic Avatar answered Sep 19 '22 14:09

Michael Miklavcic


You need install the tesseract lib on your Mac.

brew install tesseract --with-all-languages

like image 43
Long Nguyen Avatar answered Sep 19 '22 14:09

Long Nguyen