Java Native Interface(JNI)既提供了JVM实现运行系统本机代码的能力,也提供了本机代码运行Java代码的能力(通过创建新的JVM实例)。 JNI最常见的目标语言是C和C ++,至少Sun / Oracle JDK实现提供了帮助程序命令(javap - 用于代码反汇编,javah用于代码生成)。
java.lang.RuntimeException:运行 `uname` 命令时出错
我按照这个在我的Java程序中使用pdal。 我在我的 pom 中添加了以下依赖项: io.pdal pdal-native 我正在按照 this 在我的 Java 程序中使用 pdal。 我在我的 pom 中添加了以下依赖项: <dependency> <groupId>io.pdal</groupId> <artifactId>pdal-native</artifactId> <version>2.7.0</version> </dependency> <dependency> <groupId>io.pdal</groupId> <artifactId>pdal_3</artifactId> <version>2.7.0</version> </dependency> <dependency> <groupId>io.pdal</groupId> <artifactId>pdal-scala_2.13</artifactId> <version>2.7.0</version> </dependency> 代码是: Pipeline pipeline = new Pipeline(json, LogLevel.Info()); //error on this line pipeline.execute(); 但这失败了: java.lang.RuntimeException:运行uname命令时出错 我不确定“uname”的来源。它不是我的管道 json 的一部分。 我错过了什么? 编辑: 这是堆栈跟踪: java.lang.RuntimeException: Error running `uname` command at scala.sys.package$.error(package.scala:27) ~[scala-library-2.13.13.jar:na] at com.github.sbt.jni.syntax.NativeLoader$.liftedTree1$1(NativeLoader.scala:21) ~[sbt-jni-core_3-1.7.0.jar:1.7.0] at com.github.sbt.jni.syntax.NativeLoader$.loadPackaged$1(NativeLoader.scala:22) ~[sbt-jni-core_3-1.7.0.jar:1.7.0] at com.github.sbt.jni.syntax.NativeLoader$.load$1(NativeLoader.scala:56) ~[sbt-jni-core_3-1.7.0.jar:1.7.0] at com.github.sbt.jni.syntax.NativeLoader$.load(NativeLoader.scala:59) ~[sbt-jni-core_3-1.7.0.jar:1.7.0] at com.github.sbt.jni.syntax.NativeLoader.<init>(NativeLoader.scala:6) ~[sbt-jni-core_3-1.7.0.jar:1.7.0] at io.pdal.Pipeline$.<init>(Pipeline.scala:50) ~[pdal_3-2.7.0.jar:2.7.0] at io.pdal.Pipeline$.<clinit>(Pipeline.scala:50) ~[pdal_3-2.7.0.jar:2.7.0] at io.pdal.Pipeline.<init>(Pipeline.scala:30) ~[pdal_3-2.7.0.jar:2.7.0] at io.pdal.Pipeline.<init>(Pipeline.scala:33) ~[pdal_3-2.7.0.jar:2.7.0] at com.lidarapidemo.lidarprocessing.LidarProcessor.streamPointCloudPostgis(LidarProcessor.java:100) ~[classes/:na] at com.lidarapidemo.controllers.LidarController.lambda$pointsInBoundingBox$0(LidarController.java:39) ~[classes/:na] at org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBodyReturnValueHandler$StreamingResponseBodyTask.call(StreamingResponseBodyReturnValueHandler.java:110) ~[spring-webmvc-6.1.11.jar:6.1.11] at org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBodyReturnValueHandler$StreamingResponseBodyTask.call(StreamingResponseBodyReturnValueHandler.java:97) ~[spring-webmvc-6.1.11.jar:6.1.11] at org.springframework.web.context.request.async.WebAsyncManager.lambda$startCallableProcessing$4(WebAsyncManager.java:348) ~[spring-web-6.1.11.jar:6.1.11] at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) ~[na:na] at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) ~[na:na] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[na:na] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[na:na] at java.base/java.lang.Thread.run(Thread.java:1583) ~[na:na] 2024-08-13T12:15:25.380+05:30 ERROR 2384 --- [lidarapidemo] [nio-8080-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Async processing failed: java.lang.ExceptionInInitializerError] with root cause java.lang.RuntimeException: Error running `uname` command at scala.sys.package$.error(package.scala:27) ~[scala-library-2.13.13.jar:na] at com.github.sbt.jni.syntax.NativeLoader$.liftedTree1$1(NativeLoader.scala:21) ~[sbt-jni-core_3-1.7.0.jar:1.7.0] at com.github.sbt.jni.syntax.NativeLoader$.loadPackaged$1(NativeLoader.scala:22) ~[sbt-jni-core_3-1.7.0.jar:1.7.0] at com.github.sbt.jni.syntax.NativeLoader$.load$1(NativeLoader.scala:56) ~[sbt-jni-core_3-1.7.0.jar:1.7.0] at com.github.sbt.jni.syntax.NativeLoader$.load(NativeLoader.scala:59) ~[sbt-jni-core_3-1.7.0.jar:1.7.0] at com.github.sbt.jni.syntax.NativeLoader.<init>(NativeLoader.scala:6) ~[sbt-jni-core_3-1.7.0.jar:1.7.0] at io.pdal.Pipeline$.<init>(Pipeline.scala:50) ~[pdal_3-2.7.0.jar:2.7.0] at io.pdal.Pipeline$.<clinit>(Pipeline.scala:50) ~[pdal_3-2.7.0.jar:2.7.0] at io.pdal.Pipeline.<init>(Pipeline.scala:30) ~[pdal_3-2.7.0.jar:2.7.0] at io.pdal.Pipeline.<init>(Pipeline.scala:33) ~[pdal_3-2.7.0.jar:2.7.0] at com.lidarapidemo.lidarprocessing.LidarProcessor.streamPointCloudPostgis(LidarProcessor.java:100) ~[classes/:na] at com.lidarapidemo.controllers.LidarController.lambda$pointsInBoundingBox$0(LidarController.java:39) ~[classes/:na] at org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBodyReturnValueHandler$StreamingResponseBodyTask.call(StreamingResponseBodyReturnValueHandler.java:110) ~[spring-webmvc-6.1.11.jar:6.1.11] at org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBodyReturnValueHandler$StreamingResponseBodyTask.call(StreamingResponseBodyReturnValueHandler.java:97) ~[spring-webmvc-6.1.11.jar:6.1.11] at org.springframework.web.context.request.async.WebAsyncManager.lambda$startCallableProcessing$4(WebAsyncManager.java:348) ~[spring-web-6.1.11.jar:6.1.11] at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) ~[na:na] at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) ~[na:na] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[na:na] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[na:na] at java.base/java.lang.Thread.run(Thread.java:1583) ~[na:na] 总结评论:您正在使用的库对于您运行程序的操作系统不可行。 uname 是一个存在于 Unix 上的程序(因此也存在于 Linux 和 MacOS 上),但不存在于 Windows 上。 因此在 Windows 上运行您的程序预计会失败。
我决定将我的 Java“本机”方法类放入我的程序中的某个包中。 当我在该 java 类上调用 javac -h 时,它会生成一个名为 com_example_foo_baz_MyJniInterface.h 的文件 ...
所以,这是一个边缘情况,无论进行多少谷歌搜索似乎都无法发现。 我在 Kotlin 有一个枚举; 打包 myapp 公共枚举状态{ 状态_成功, 状态_冻结, 状态等待,
JNI CallStaticObjectMethod 导致 Java 21 崩溃
我工作的公司最近从 Java 8 迁移到 Java 21,它还更新了 JNI 版本以及与 C++ 的互操作性。所有函数(用 C++ 编写)都是通过 JNI 调用的
我遇到了与我正在尝试做的事情相关的各种答案,但没有完全相同的答案,感谢任何帮助...... 我有一个包范围的 java 枚举,我想将其作为 argumentmnt 传递给...
使用 C++ 进行串行 USB 访问的 Android 应用程序
我正在开发一个Android应用程序,需要访问用C编写的第三方库,通过命令(*pSerialHandle) = open(deviceName, O_RDWR | O_NOCTTY |
我正在开发一个库来检测root环境并且我能够实现该目标,但是由于存在诸如frida,lspose等工具,攻击者可以轻松地挂钩libc的功能...
尝试为java程序加载jemalloc来查找本机内存泄漏,但无法使其工作。到目前为止执行的步骤 版本:Mac OS 14.3、JDK 11、jemalloc - 5.3.0 1.通过...安装jemalloc
我们的主程序是用java编写的,但是从存储中提取数据的代码是用C编写的。我需要从提取的数据构建一个HDF5文件。用JNI调用C代码来g...
当我尝试运行我的 java jar 时,错误:发生 JNI 错误
我更新了 intellJ 社区,从那时起,当我创建一个 jar 并尝试打开它时,我遇到了这个问题 错误:发生 JNI 错误,请检查您的安装并重试输入图像描述...
我试图通过 JNI 将对象指针从 C++ 代码传递到 java 方法,以便稍后在回调中将其转换回指针。 无效客户端::进程() { 长这个地址=(长)这个;
使共享库成为独立的(将共享库的依赖项递归地预先链接到其中)?
我想将本机共享库打包到Java应用程序中(因此它成为JAR的一部分),以便通过JNI调用。 共享库(Linux)来自第 3 方并具有一些依赖项,
如何在 Play 框架中链接“.lib”和“.dll”文件?
我有我的项目在play框架(scala)中。对于这个项目,我已经将 jar 文件加载到项目的 lib 目录中。我不知道将“.lib”和“.dll”文件放置在哪里。现在我...
我在 Linux 上启动我的应用程序时遇到问题,从 IDE 和直接从 win Everthink 都可以,但在 Linux 上我收到以下错误: 本机库版本 = RXTX-2.2pre2 2017 年 3 月 6 日 7:54:44 PM 组织。
尝试在 Pi 上的 java 中为 RXTX 设置代码中的 lib 路径
让Java程序在Windows和Raspberry Pi上运行。在Pi上运行程序时,我需要使用-Djava.library.path=/usr/lib/jni 当我运行 jar 时,可以找到 RXTX 库。我想...
如何在Android Studio中通过反汇编进入本机代码?
我试图进入(F7)Android Studio 中的本机函数,但它跳过了。我想通过 LLDB 进入本机函数,并反汇编该函数。 如何步入原生天秤座...
将 char* 转换为 jByteArray 或进行 Latin1 到 UFT8 的转换
为了将数据从 PLC 传输到我的应用程序,我有来自 PLC 制造商的 C/C++ API。由于我的应用程序是用 Java 编写的,因此我使用 SWIG 来访问 API。 这是摘录...
Swig:将 char* 转换为 jByteArray 或进行 Latin1 到 UFT8 的转换
为了将数据从 PLC 传输到我的应用程序,我有来自 PLC 制造商的 C/C++ API。由于我的应用程序是用 Java 编写的,因此我使用 SWIG 来访问 API。 这是...
我刚刚熟悉 jni/java 以及我们想要调用用本机代码编写的方法的工作流程,但我尚无法理解的是,如果 n...