- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个名为 Untitled.jar 的 jar 文件,它可以打印一些文本消息。它有一个 void 函数调用 giveMeString(),类名是 xegerImplementation。
giveMeString() 为 giveMeString() 中定义的正则表达式生成字符串。我需要在给定 C++ 中的正则表达式的情况下生成字符串。由于 java 有一个名为 xeger 的库可以执行此操作,所以我想创建一个 jar,然后将其导入到 c++ 代码中。
我已经实现了从 https://docs.oracle.com/javase/9/docs/specs/jni/invocation.html 获得的以下代码并调整它以匹配我的 jar 文件。
cpp 文件名为main.cpp,包含以下代码。
#include <iostream>
#include "jni.h"
int main(){
JavaVM *jvm; /* denotes a Java VM */
JNIEnv *env; /* pointer to native method interface */
JavaVMInitArgs vm_args; /* JDK/JRE 9 VM initialization arguments */
JavaVMOption* options = new JavaVMOption[1];
options[0].optionString = "-Djava.class.path=/home/aaa/Desktop/Untitled.jar";
vm_args.version = JNI_VERSION_1_8;
vm_args.nOptions = 1;
vm_args.options = options;
vm_args.ignoreUnrecognized = false;
/* load and initialize a Java VM, return a JNI interface
* pointer in env */
JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
delete options;
/* invoke the Main.test method using the JNI */
jclass cls = env->FindClass("xegerImplementation");
jmethodID mid = env->GetStaticMethodID(cls, "giveMeString", "(I)V");
env->CallStaticVoidMethod(cls, mid);
/* We are done. */
jvm->DestroyJavaVM();
}
当我使用 g++ main.cpp -o main 生成可执行主文件时。但它给了我以下错误:
/tmp/ccf3LtdA.o: In function `main':
main.cpp:(.text+0x5d): undefined reference to `JNI_CreateJavaVM'
collect2: error: ld returned 1 exit status
然后在stackoverflow的帮助下,我用下面的代码编译解决了这个错误:
g++ -g -I/usr/lib/jvm/java-8-oracle/include/ -I/usr/lib/jvm/java-8-oracle/include/linux/ -L/usr/bin/java -L/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/ main.cpp -o main -ljvm
它生成可执行主文件。
然后,我尝试使用以下命令运行可执行主文件
./main
它给我以下错误:
./main: error while loading shared libraries: libjvm.so: cannot open shared object file: No such file or directory
我尝试将 libjvm.so 的路径添加到 LD_LIBRARY_PATH。但还是不行。
我做错了什么?任何帮助将不胜感激。
更新 1:我把libjvm.so文件复制到ubuntu的/lib文件夹下。现在它找到了错误的libjvm.so文件,错误消失了。现在有一种新的错误类型:
Error occurred during initialization of VM
java/lang/NoClassDefFoundError: java/lang/Object
当我执行 echo $JAVA_HOME 时,它会给我以下信息:
/usr/lib/jvm/java-8-oracle
java -version 也可以正常工作。
更新 2:出现问题是因为我没有正确设置 LD_LIBRARY_PATH。现在我将它设置为 $JAVA_HOME/lib/amd64:$JAVA_HOME/jre/lib/amd64/server
这解决了找不到 libjvm.so 的问题。
最佳答案
出现问题是因为我没有正确设置 LD_LIBRARY_PATH。现在我将它设置为 $JAVA_HOME/lib/amd64:$JAVA_HOME/jre/lib/amd64/server 这解决了找不到 libjvm.so 的问题。
关于java - 尝试使用 JNI : libjvm. 在 C++ 代码中使用 jar 时出错,因此未找到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48069402/
我有一个使用 voce.h 的程序,它又使用 jvm。 我已经包含了所有必要的 java 文件并链接到 libjvm.so 所以我现在没有收到编译器错误但是当我运行程序时我收到错误消息: error
我见过的所有 JNI 指南(例如 JNI runtime linking )都建议我将 JNI 库链接到 libjvm.so: $ gcc -I${JAVA_HOME}/include -c -o t
我有点惊讶我必须发布一个看起来相当琐碎且易于查找的问题......但显然不是。 因为它看起来我的 jni.h 和 libJvm.so 库不同步(或者我怀疑如此),它显示试图加载我的 Java应用程序作
我在深入了解我们遇到的 Java 热点错误时遇到了真正的问题。错误似乎是随机的,并且有问题的框架各不相同。示例错误如下所示: # # A fatal error has been detected b
嗨,谢谢您的阅读, 运行程序时出现以下错误,无法确定解决方案是什么。我还在这里查看了所有带有类似错误的主题,但无法解决我的问题。这里的错误: # A fatal error has been dete
startJVM是加载jvm用的方法。在JPype,apache mod等等很多地方都用到。但凡要用其他语言来加载jvm进程,就要用到这个。 可惜往往会出错。一般都是 复制代码代码如下:
当我在我的 Mac 上设置 flyway 时,当我尝试执行命令 ./flyway info 以验证我已正确完成的所有配置时,我曾经收到错误消息 - libjvm.dylib” cannot be op
我正在尝试制作这个 JNI example作品。我能够编译所有文件,但由于这个错误我无法启动可执行文件: ./TEST: error while loading shared libraries: l
我在以下 Node 插件中收到错误并提出了一个问题:插件在这里:https://github.com/joeferner/node-java问题在这里:https://github.com/joefe
我通过ppa:ubuntugis/ubuntugis-unstable安装了QGIS 。我的 Ubuntu 12.04 附带 OpenJDK 1.7.0。当我从命令行启动 qgis 时,返回以下错误消
我在rhel上安装了eclipse。我配置完jdk以外的环境后,出现了问题。 Failed to load the JNI shared library libjvm.so 我在网上搜索了这个问题的解
我在 Cent OS 6.6 上安装了 java-1.7.0-openjdk-1.7.0.65-2.5.1.2.el6_5.x86_64。当我尝试运行我的软件时,出现“libjvm.so错误的ELF类
我从 Oracle Pages 7u10 安装最新的 jdk。当我有 java6 时一切正常,但现在我无法运行 netbeans 或 java 首选项(来自系统首选项),因为我收到错误:使用 libj
我正在尝试在我的程序中嵌入 java 虚拟机,但我的 libjvm.dylib 缺少 JNI_GetCreatedJavaVMs。 该程序在 Windows 和 Linux 平台上都运行良好。但是,在
当我在我的 linux(64 位)上使用 javavm 时,我收到错误消息:.../amd64/server/libjvm.so:无法识别文件:无法识别来自文件。 我找不到关于此的任何有用信息。 将
我正在使用 STAF v3.4.24 在 Sles12sp2 上进行重启测试,一段时间后我收到此错误: # A fatal error has been detected by the Java Ru
我正在尝试在 Centos 5.7 vagrant box 中运行 jetty(它在“真实”计算机上运行良好;使用 centos 和 linux mint 进行了测试)。这是 header 错误: #
您好,感谢您的阅读, 我在运行我的程序时遇到以下错误,我不知道解决方案是什么。我还查看了此处出现类似错误的所有主题,但无法解决我的问题。这里的错误: # A fatal error has been
尝试使用此代码在我的 14.10 ubuntu 上的 R 上安装 rJava 包 if (!require(rJava)) install.packages('rJava') 在重新安装 jdk 后遇
我有一个Java项目需要加载一些原生动态库。 我运行 64 位 JVM,我需要加载 64 位动态库,但出现以下异常: java.lang.UnsatisfiedLinkError: /Users/ma
我是一名优秀的程序员,十分优秀!