2014-12-04 86 views
3

我有JMagick库的奇怪问题。我使用Debian,所以我已经安装了libjmagick6-Java和libjmagick6-JNI,这里有步骤,我已经做了:不能得到JMagick工作

  • 我抄jmagick-6.6.9.jar/usr/share/java/$JAVA_HOME/jre/lib/ext/
  • 我已经设置/usr/lib/jni(其中是libJMagick.so)作为本机库位置在:
    • JRE系统库(在eclipse)
    • jmagick-6.6.9.jar(在eclipse)

此外,我已经在简单的Java项目中测试了JMagick并且它在其中工作,但是在第二个项目中运行在Tomcat 6中的Web应用程序中,它只是不起作用。

这是我的代码WORKS - 所以jmagick必须安装正确:

public class Main { 
    public static void main(String[] arg) { 
     MagickImage image = null; 
     ImageInfo imageInfo = null; 

     try { 
      imageInfo = new ImageInfo("/home/firzen/IMG_0120.JPG"); 
      image = new MagickImage(imageInfo); 
      System.out.println(image.getDimension().width); 
     } catch (MagickException e) { 
       System.out.println(e); 
     } 
     image.destroyImages(); 
    } 
} 

这里是在Web应用程序是代码不工作

public void init() {   
    ServletContext sc = getServletContext(); 
    cacheHandlers = (Map<String, CacheContext>) sc.getAttribute("handlers"); 
    Boolean applicationReady = (Boolean) sc.getAttribute("ready"); 
    isReady = cacheHandlers != null && Boolean.TRUE.equals(applicationReady); 

    System.out.println("zde"); 
    MagickImage image = null; 
    ImageInfo imageInfo = null; 

    try { 
     imageInfo = new ImageInfo("/home/firzen/IMG_0120.JPG"); 
     image = new MagickImage(imageInfo); 
     System.out.println(image.getDimension().width); 
    } catch (MagickException e) { 
      System.out.println(e); 
    } 
    image.destroyImages(); 
} 

最后这里是例外抛出提到的代码:

java.lang.UnsatisfiedLinkError: no JMagick in java.library.path 
    at java.lang.ClassLoader.loadLibrary(Unknown Source) 
    at java.lang.Runtime.loadLibrary0(Unknown Source) 
    at java.lang.System.loadLibrary(Unknown Source) 
    at magick.Magick.<clinit>(Magick.java:18) 
    at cz.bach.mrimage.MrImageSrv.init(MrImageSrv.java:44) 
    at javax.servlet.GenericServlet.init(GenericServlet.java:212) 
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1173) 
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:809) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:129) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:563) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:554) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
    at java.lang.Thread.run(Unknown Source) 

请告诉我一些想法如何解决这个问题lem ..提前致谢!

回答

5

我终于通过检查真正的java.library.path解决了这个问题:

System.out.println("java.library.path is: " + System.getProperty("java.library.path")); 

这给了我这个烂摊子:

java.library.path is: /opt/jdk1.7.0_45/jre/lib/i386/server:/opt/jdk1.7.0_45/jre/lib/i386:/opt/jdk1.7.0_45/jre/../lib/i386:/usr/lib/jvm/java-6-openjdk-i386/jre/lib/i386/client:/usr/lib/jvm/java-6-openjdk-i386/jre/lib/i386::/usr/java/packages/lib/i386:/lib:/usr/lib 

在最后你可以看到在/ usr/lib,所以我在/ usr/lib中创建了libJMagick.so链接:

ln -s /usr/lib/jni/libJMagick.so /usr/lib/libJMagick.so 

享受! :-)

+1

好计划,没有工作。我已经完成了5次以前的安装,它会随机停止检测本地库。 'libJMagick.so'绝对在'java.library.path'中,所以它是依赖关系,但是当它尝试加载类时,我得到'UnsatisfiedLinkError'。 – coladict 2016-12-23 10:11:47