繁体   English   中英

如何在64位Windows 7上使用cygwin从C ++生成Java VM?

[英]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.lib中的符号,我使用了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  

有人可以提出一种使用这种环境在C ++中实现JVM的方法吗? 或者,如果我错了(可能也是),有人可以告诉我为什么我得到这些错误吗?

提前致谢!

0x8664是DLL的COFF标头中的IMAGE_FILE_MACHINE_AMD64(其描述为“ x64”)常量。 因此,基本上,GCC确实在说它不支持x64 DLL。

关于第二部分,经过一番搜索,我发现当您的编译器未使用x86-x64支持编译时,您会收到此错误消息(“抱歉,未实现:未编译到64位模式”)。

可能有两种解决方案:一种,切换到x86 DLL / JDK。 或两个,用x86-x64支持为Cygwin编译GCC。

因此,简短的答案是:不,不可能在您当前的环境中做到这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM