在Ubuntu上的Tomcat中加载共享本机库

如何在Ubuntu上的Tomcat6中加载共享库?

我创建了一个名为“libawragrids.so”的库“awragrids”并将其放入

/var/lib/tomcat6/shared 

我在终端中设置了以下环境变量,我从中调用start tomcat:

 export PATH=$PATH:/var/lib/tomcat6/shared export JAVA_OPTS="-Djava.library.path=/var/lib/tomcat6/shared" export LD_LIBRARY_PATH=/var/lib/tomcat6/shared 

然后我尝试加载库

 private static final String GRIDTOOL_LIBRARY_NAME = "awratools"; static { try { System.loadLibrary(GRIDTOOL_LIBRARY_NAME); } catch (java.lang.SecurityException e) { System.out.println("Not allowed to load dynamic library " + GRIDTOOL_LIBRARY_NAME + "."); throw e; } catch (java.lang.UnsatisfiedLinkError e) { System.out.println("Failed to load dynamic library " + GRIDTOOL_LIBRARY_NAME + "."); throw e; } } 

并在第二个挡块中结束。 我所做的所有阅读都表明,前两个出口中的任何一个都应该成功。 在Windows上,我将“awragrids.dll”放在路径上的文件夹中,它工作正常。

我花了太多时间在这上面,真的需要睡一觉……请帮助!

确保Tomcat的启动脚本 – /var/lib/tomcat6/bin catalina.sh实际上是使用环境中的JAVA_OPTS 。 在我正在查看的系统脚本中,有人在没有拉入环境设置的情况下进行了完整的定义。

我认为这可能是我的错误。 当我最初编译库时,它有一个不同的名称(“libawargrids.so”),所以我重命名为:

 mv libawragrids.so libawratools.so 

虽然等效似乎适用于Windows,但它可能无法在Linux上运行。 当我使用名称“awratools”(生成“libawratools.so”)再次编译它时,问题就消失了。

虽然问题现在已经解决,但是如果有人能够确认重命名可能是导致它的原因(并且可能解释了原因),那将是值得赞赏的。

很抱歉浪费时间,但感谢您的帮助!

PS我现在已经放置了这些线:

 export JAVA_OPTS="-Djava.library.path=/var/lib/tomcat7/shared" export LD_LIBRARY_PATH=/var/lib/tomcat7/shared 

在/etc/init.d/tomcat6的顶部,所以哪个用户启动服务并不重要。 如果由于某种原因,这是不好的,请告诉我。