我正在编写一个 Scala 程序,它使用通过 JNA 加载的 C++ 共享对象来调用一些我们用 C++ 编写的自定义文件读取函数,并且不希望同时维护 Java/Scala 副本。该程序只需要兼容Linux。
我的问题是,检查共享对象是否以编程方式可用的适当方法是什么?如果用户忘记将共享对象添加到其 LD_LIBRARY_PATH,则当他们尝试使用其中的某些功能时,GUI 将崩溃。我想在启动时进行检查,以确保共享对象可用 - 我可以尝试进行读取,然后捕获任何错误,但这需要一个文件来读取,而且感觉不合适方法来做到这一点。
有什么想法吗?非常感谢。
最佳答案
如果您通过 JNA 加载,那么如果 JNA 找不到该库或由于缺少依赖项而无法加载它,您可以依靠 JNA 抛出 UnsatisfiedLinkError。
System.loadLibrary
和 System.load
依赖于 java.library.path
,它或多或少是从 LD_LIBRARY_PATH 初始化的
与 JNA 的 jna.library.path
不太一样(JNA 可以通过该变量动态定向以搜索更多位置)。
关于java - Scala/Java JNA 检查共享对象可用性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12527114/