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

Java 在Ubuntu上的Tomcat中加载共享本机库,java,tomcat,shared-libraries,Java,Tomcat,Shared Libraries,如何在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_P

如何在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选项。在我现在看到的系统脚本中,有人在没有拉入环境设置的情况下输入了完整的定义。

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

mv libawragrids.so libawratools.so
虽然类似的方法似乎在Windows上有效,但在Linux上可能不起作用。当我使用名称“awratools”(生成“libawratools.so”)再次编译它时,问题消失了

虽然问题现在已经解决,但如果有人能确认改名可能是造成问题的原因(也许能解释原因),我们将不胜感激

很抱歉浪费了大家的时间,但谢谢你的帮助

请注意,我现在已经放置了以下行:

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

在/etc/init.d/tomcat6的顶部,因此无论哪个用户启动服务都无关紧要。请让我知道这是否因为某种原因而不好。

共享库是否依赖于Linux下的其他库,而在Windows下它不需要这些库?您是否通过bash/init脚本运行tomcat?可能不会以相同的userguido运行-我改为root来运行脚本(我使用的是sudo,但认为环境变量可能不可用…我想这是你的建议?)David-我链接到相同的库…我不确定。我对库运行了ldd,发现了一个我找不到的库(linux vdso.so.1)(find/-name“linux vdso.so.1”)在我的系统上……也许这就是问题所在……好吧,现在我明白了为什么我找不到那个。它是一个非常新的VM(在VirtualBox中)。/usr/share/tomcat6/bin/catalina.sh和/etc/init.d/tomcat6都只传递JAVA_OPTS的值。