3

如何在 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”放在路径上的文件夹中,它工作正常。

我在这上面花太多时间,真的需要睡一会儿……请帮忙!

4

2 回答 2

0

我认为这可能是我的一个错误。当我最初编译该库时,它有一个不同的名称(“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 的顶部,所以哪个用户启动服务并不重要。请让我知道这是否出于某种原因不好。

于 2012-05-29T00:21:21.363 回答
0

确保 Tomcat 的启动脚本--in--实际上是在使用catalina.shfrom环境。在我现在正在查看的系统上的脚本中,有人在没有引入环境设置的情况下输入了完整的定义。/var/lib/tomcat6/binJAVA_OPTS

于 2012-05-27T11:10:03.003 回答