在作为Java Web应用程序运行时,SO库未加载

时间:2013-11-23 07:28:22

标签: java tomcat shared-libraries

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

我在我的java应用程序中加载了一些 .so 文件。

我使用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文件位置 JAVA_OPTS 中的

setenv.sh catalina.sh 。但都没有效果。

我甚至不理解的一些解决方案。

有人可以逐步处理

将所有文件放在tomcat中的位置? 我应该编辑哪个文件以及我应该添加什么?

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

1 个答案:

答案 0 :(得分:0)

在Tomcat等Web容器中运行应用程序时,不会调用main方法。

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

尝试google“java中的上下文监听器示例” - 您将获得大量点击并有大量示例可供使用。

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