【问题标题】:Loading a shared native library in Tomcat on Ubuntu在 Ubuntu 上的 Tomcat 中加载共享本机库
【发布时间】:2012-05-27 10:53:54
【问题描述】:

如何在 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;
    }
}

并在第二个 catch 块中结束。我所做的所有阅读都表明前两个导出中的任何一个都可以解决问题。在 Windows 上,我将“awragrids.dll”放在路径上的文件夹中,它工作正常。

我在这件事上花费了方式太多时间,真的需要好好睡一觉……请帮忙!

【问题讨论】:

  • 共享库是否依赖于其他 Linux 下它在 Windows 下不需要的库?
  • 您是否通过 bash/init 脚本运行 tomcat?不能以同一用户身份运行
  • guido - 我更改为 root 来运行脚本(我使用 sudo,但认为环境变量可能不可用......我认为这是你的建议?)
  • David - 我链接到相同的库...我不确定。我对库运行 ldd 并找到了一个我在系统上找不到的库 (linux-vdso.so.1) (find / -name "linux-vdso.so.1")……也许这就是问题所在。
  • ...好吧,现在我明白为什么我找不到那个了。

标签: java tomcat shared-libraries


【解决方案1】:

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

【讨论】:

  • 这是一个非常新鲜的虚拟机(在 VirtualBox 中)。 /usr/share/tomcat6/bin/catalina.sh 和 /etc/init.d/tomcat6 都只是传递 JAVA_OPTS 的值。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2013-06-12
    • 2013-02-04
    • 2019-02-10
    • 1970-01-01
    • 2021-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多