【问题标题】:SO libraries not loading when running as Java web application作为 Java Web 应用程序运行时未加载 SO 库
【发布时间】:2013-11-23 07:28:22
【问题描述】:

我在So中搜索了很多。但找不到合适的解决方案。问题来了

我有一些 .so 文件要加载到我的 java 应用程序中。

我用 main 方法创建了一个 Java 类并使用 System.load();

加载它
System.load("/home/myfolder/TFS-SDK-11.0.0/redist/native/linux/x86_64/libnative_auth.so");        
System.load("/home/myfolder/TFS-SDK-11.0.0/redist/native/linux/x86_64/libnative_console.so");     

然后是我的 Java 代码。当我将该类作为 Java 应用程序运行时,它运行良好。

然后我在我的 Java Web 应用程序中添加了相同的代码。我在tomcat中运行它。但它显示了一些错误

Exception in thread "main" java.lang.UnsatisfiedLinkError

我发现这是因为它没有加载库文件。

当我在谷歌搜索时,我找到了一些解决方案,但它没有帮助我。我尝试在

中添加so文件位置

setenv.shcatalina.shJAVA_OPTS 中。但没有一个奏效。

一些我什至不明白的解决方案。

谁能给个步骤

将so文件放在tomcat的什么位置? 我应该编辑哪个文件,应该添加什么?

我搜索了很多。但大多数答案我不明白。

【问题讨论】:

  • @chrylis 我不想做一个罐子什么的。我想将这些 SO 文件放在侧 tomcat 中(如有必要)并加载文件。或者在tomcat的一些配置文件中我应该能够提到SO文件的位置(我不知道是哪个配置文件)。

标签: java tomcat shared-libraries


【解决方案1】:

当您在 Tomcat 等 Web 容器中运行您的应用时,您的 main 方法将不会被调用。

如果你想在容器启动时加载这些库,那么我建议使用 ContextListener。

尝试用谷歌搜索“java 中的上下文侦听器示例” - 你会得到大量的点击率和大量的示例。

您可能还需要将这些库添加到您的 Unix 库路径中。在您的 Tomcat 启动脚本中执行此操作通常很方便。库路径变量的名称取决于 unix 风格,所以恐怕我不能告诉你那个路径是什么。

【讨论】:

  • 你的意思是startup.sh的启动脚本?我正在使用 Ubuntu
  • 是的 - startup.sh (或者可能是 catalina.sh )。这是tomcat的启动脚本,不是整个unix安装的启动脚本
猜你喜欢
  • 2010-11-17
  • 2015-11-11
  • 2017-02-23
  • 2011-01-20
  • 2021-07-23
  • 1970-01-01
  • 2020-01-01
  • 1970-01-01
  • 2017-01-02
相关资源
最近更新 更多