【问题标题】:Calling C++ From JMS with JNI使用 JNI 从 JMS 调用 C++
【发布时间】:2014-11-14 03:07:47
【问题描述】:

我正在尝试通过 JMS MessageListener 中的 JNI 包装器调用 Sleuth Kit C++ 框架。但是我收到了这个错误

java.lang.UnsatisfiedLinkError: /tmp/libtsk_jni.so: libtsk.so.10: 无法打开共享对象文件:没有这样的文件或目录

我尝试将 libtsk_jni.so 处理为 /tmp 但没有区别。 但我可以在 Java 控制台应用程序中做到这一点。可能是什么错误?

public void onMessage(Message message) {
   try {
      String imagePath = "uploads/Cfreds001A001.dd";
         try{
            SleuthkitCase sk = SleuthkitCase.newCase(imagePath + ".db");

         } catch (TskCoreException ex) {

         } 
  } catch (JMSException ex) {
     Logger.getLogger(WorkerBean.class.getName()).log(Level.SEVERE, null, ex);
  } catch (InterruptedException ex) {
     Logger.getLogger(WorkerBean.class.getName()).log(Level.SEVERE, null, ex);
}

【问题讨论】:

  • libtsk.so.10 文件在哪里?

标签: java c++ jakarta-ee java-native-interface jms


【解决方案1】:

标准不允许尝试从 Java EE 容器中运行的代码中使用本机方法,这可能会导致未定义的行为。请参阅 2000 年 8 月的 JavaWorld 文章 "Programming restrictions on EJB",据我所知,今天仍然如此。

根据您的 Java EE 容器,您实际上可能能够使其工作。将libtsk_jni.so 放入系统库目录或编辑服务器的启动脚本以设置LD_LIBRARY_PATH 环境变量可能会有所帮助。

【讨论】:

  • +1 的建议 :) ,那么我可以运行 Sleuth Kit 或来自 Java EE 的任何 c++ 代码的标准方法是什么。我敢肯定,我不是唯一一个想做这种事情的人。 O:) 图像处理库不是使用像 Sleuth Kit 这样的本机代码吗? :) 不知何故,应该有办法,对吧? :)
  • 在单独的进程中运行 Sleuth Kit。您可以每次使用Runtime.exec 创建该进程,或者它可以长时间运行(即使在不同的主机上)并接受 TCP 套接字上的命令,并且 onMessage 方法将使用Socket 连接到它;或者您可以在支持 Java 或 C 存储过程(DB2、Oracle、Postgres...)的数据库中运行它并通过 JDBC(存储在 JNDI 中)进行连接。
猜你喜欢
  • 2019-04-09
  • 1970-01-01
  • 2012-03-28
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多