如何在64位Windows 7上使用cygwin从c++生成Java虚拟机
How to generate a Java VM from C++ using cygwin on a 64-bit Windows 7?
我正在尝试从c++程序创建Java虚拟机(JVM)。经过研究,我发现我需要调用JNI_CreateJavaVM方法来实现它。只是为了尝试,我得到了Michael Bruckmeier在这个问题中发布的一段代码,它不会创建Java VM (JNI)更改很少的东西来避免警告。
#include <jni.h>
#include <iostream>
int main(int argc, char *argv[])
{
char optionStr[] = "-Djava.class.path=./build/java"; //Path to the java source code
JavaVM *jvm;
JNIEnv *env;
JavaVMInitArgs vm_args;
JavaVMOption options[1];
options[0].optionString = optionStr;
vm_args.version = JNI_VERSION_1_2;
vm_args.nOptions = 1;
vm_args.options = options;
vm_args.ignoreUnrecognized = 0;
jint ret = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
std::cout << "JNI_CreateJavaVM returned " << ret << std::endl;
return 0;
}
我在cygwin内部的gcc中编译了前面的程序,但我得到了一些链接错误:
$ gcc main.cpp /cygdrive/c/Progra~1/Java/jdk1.6.0_24/lib/jvm.lib -lstdc++ -o main
/tmp/ccKyd2Xk.o:main.cpp:(.text+0xfa): undefined reference to `_JNI_CreateJavaVM'
collect2: ld returned 1 exit status
为了检查jvm中的符号。我使用nm命令,得到了这些消息的一个非常大的列表:
BFD: /cygdrive/c/Progra~1/Java/jdk1.6.0_24/lib/jvm.lib(jvm.dll): Recognised but
unhandled machine type (0x8664) in Import Library Format archive
nm: jvm.dll: File format not recognized
我猜问题是Java开发工具包(JVM)是64位的。我的操作系统是64位的Windows 7, gcc正在生成一个32位的应用程序。所以,我认为这是不相容的。我还尝试生成64位的应用程序(虽然我更喜欢32位的),这是结果:
$ gcc -m64 main.cpp /cygdrive/c/Progra~1/Java/jdk1.6.0_24/lib/jvm.lib -lstdc++ -o main
main.cpp:1: sorry, unimplemented: 64-bit mode not compiled in
有人能建议一种方法来实现JVM在c++中使用这个环境吗?或者万一我错了(也可以),有人能告诉我为什么我得到这些错误吗?
提前感谢!
0x8664是DLL的COFF头中的IMAGE_FILE_MACHINE_AMD64(其描述为"x64")常量。所以基本上GCC确实说它不支持x64 dll。
关于第二部分,在搜索了一下之后,我发现当你的编译器没有使用x86-x64支持编译时,你会得到这个错误消息("对不起,未实现:64位模式未编译")。
有两种可能的解决方案:一,切换到x86 DLL/JDK。或者,为支持x86-x64的Cygwin编译GCC。
所以简短的回答是:不,在你当前的环境下是不可能的
相关文章:
- Windows/Cygwin - 不能使用 pybind11 - 犯错误
- 在cygwin中运行c++脚本时发生错误
- 在cygwin中测试新的boost安装时出现cpp错误
- 如何配置Visual Studio Code以使用cygwin,cmake和gcc进行调试
- Cygwin下的gcc 9.3.0预处理器:cmdline -Dname,但名称似乎未定义
- 使用 NVIDIA GPU 在 Cygwin 中链接 OpenCL 库时遇到问题
- 在Cygwin上链接Boost库
- NetBean 和 Cygwin 的 C++ 编译错误?
- 如何从Cygwin下构建的C++程序链接到DLL
- 使用Cygwin C++时出现未定义的引用错误,为什么我的文件没有链接?
- 调用C#中的Cygwin GCC DLL挂在malloc上
- MinGW在Cygwin上.关于链接GNU科学图书馆的一些问题
- 如何在没有Cygwin或Visual Studio的情况下编译Magick++?
- 如何从.NET Core调用cygwin编译的C++
- fork() 无法使用 Cygwin
- 无效参数 C++ cygwin
- 60603 (Fedora Cygwin 5.4.0-2) when using std::cout
- 为什么我不能编译这个在Cygwin的Visual Studio中编写的C++文件?
- FingerJetFXOSE Cygwin 编译错误
- Cygwin pkg-config/protobuf filepath issues