Jni_createjavm()用退出代码1终止
JNI_CreateJavaVM() terminates with exit code 1
我试图使用JNI从C 调用Java方法。为此,我已经安装了jdk1.7.0_51
,链接到jdk1.7.0_51libjvm.lib
,包括jdk1.7.0_51include
和jdk1.7.0_51includewin32
。使用Visual Studio 2012中的以下代码,我尝试创建一个Java VM对象 - 但是该功能始终使用退出代码1终止我的应用程序(该函数不返回1:我的程序完全终止并发送退出代码1)。<<<<<<<<<<<<
#include <iostream>
#include "jni.h"
int main(int argc, char*argv[]){
JNIEnv* env = nullptr;
JavaVM* jvm = nullptr;
JavaVMInitArgs vm_args;
JavaVMOption options[2];
options[0].optionString = "-Djava.class.path=.";
options[1].optionString = "-DXcheck:jni:pedantic";
vm_args.version = JNI_VERSION_1_6;
vm_args.nOptions = 2;
vm_args.options = options;
vm_args.ignoreUnrecognized = JNI_TRUE; // remove unrecognized options
int ret = JNI_CreateJavaVM(&jvm, (void**) &env, &vm_args);
std::cout << "This code is never reached" << std::endl;
return 0;
}
OS: Windows 7(x64)
编译器: Visual Studio 2012(x86/win32项目)
Java VM: JDK1.7.0_51,i586(我认为应该可以,因为我正在为X86编译X86-否则与JVm.lib链接无效)
)我已经尝试使用两者: jdk1.7.0_51jrebinclientjvm.dll
和 jdk1.7.0_51jrebinServerjvm.dll
-有相同的结果(我不完全确定有什么区别)。
任何想法&amp;建议将不胜感激。
使用静态链接
- 从项目目录中删除
jvm.dll
。DLL必须从原始位置加载,因为似乎涉及其他DLL,参考文献。 - 将
PATH
环境变量设置为从JREjvm.dll
的文件夹开始。并且不要使用"c:folder with space in name"
表示法(围绕double quotes
的路径)。只需使用set path=c:folder with space in name;%PATH%
即可。这个错误使我以前的尝试一文不值。
使用动态链接。
- 从项目目录中删除
jvm.dll
。DLL必须从原始位置加载,因为似乎涉及其他DLL,参考文献。 - 从项目配置中删除
jvm.lib
- 使用
LoadLibrary
,带有JVm.dll的完整路径(逃脱''或使用'/') - 使用
GetProcAddress
作为"JNI_CreateJavaVM
" - 确保将适当的
typedef
用于功能指针(使用JNICALL
作为呼叫约定)
使用上述步骤修补代码使我的VS2012/SENWEN64/X86DEBUG/JDK1.6项目要输出"从未达到此代码"(带有ret == JNI_OK
)
相关文章:
- pclose() 不会给我进程退出代码
- Netbeans 10:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- 链接器命令失败,macOS 上的退出代码为 1(使用 -v 查看调用)
- 为什么我的 c++ 代码在使用堆栈时以退出代码 11 结尾?
- 使用常量字符*时退出代码 139
- 程序显示以退出代码 0; 结束
- VSCode C++终端进程已终止,退出代码为:1
- CMake 错误:链接器命令失败,退出代码为 1 和 cpp.o 文件
- clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) - 体系结构的未定义符号 x86_64:
- 如何修复 clang: 错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- CLion、MinGW 和 SDL2:进程已完成,退出代码为 -1073741515 (0xC0000135)
- 运行Qt时处理退出代码0xC0000135 hello world
- 获取加速::p rocess::子的退出代码 在提升::asio::io_service?
- Xcode:链接器命令失败,退出代码为 1(使用 -v 查看调用)[C++]
- 重载 <= 运算符,但程序以退出代码 -1073741571 (0xC00000FD) 结尾
- Android NDK.Build命令失败.未定义的引用.clang++:错误:链接器命令失败,退出代码为1
- 终端进程终止,退出代码为:1有什么方法可以修复它吗
- 运行自定义可执行文件,QProcess 立即退出,退出代码为 1
- 错误:链接器命令失败,退出代码为 1(使用 -v 查看调用):在 Macbook 上
- C++ XCODE ld:找不到体系结构x86_64 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -