尝试编译VS C ++ / CLI(托管)项目时,出现“错误LNK1104:无法打开文件{path} \ jvm.lib”。这很简单,我的目标是在预先存在的Java库中调用一些Java方法-这是我正在使用的代码:

// This is the main DLL file.

#include "stdafx.h"
#include <jni_md.h>
#include <jni.h>
#include "JBridge.h"

#pragma once

using namespace System;

namespace JBridge
{

public ref class JniBridge
{
    // TODO: Add your methods for this class here.


public:
    void HelloWorldTest()
    {
        System::Console::WriteLine("Hello Worldl from managed C++!");
    }

    JNIEnv* create_vm(JavaVM ** jvm)
    {
        JNIEnv *env;
        JavaVMInitArgs vm_args;

        JavaVMOption options;
        //Path to the java source code
        options.optionString = "-Djava.class.path=D:\\Java Src\\TestStruct";
        vm_args.version = JNI_VERSION_1_6; //JDK version. This indicates version 1.6
        vm_args.nOptions = 1;
        vm_args.options = &options;
        vm_args.ignoreUnrecognized = 0;

        int ret = JNI_CreateJavaVM(jvm, (void**)&env, &vm_args);
        if(ret < 0)
            printf("\nUnable to Launch JVM\n");
        return env;
    }
    };
}


我已验证该文件确实在路径位置中,并且已将其添加到include dir和linker属性页的项目属性中。

更新资料
得到了jvm.lib进行更多的链接。

编译在生成过程中导致以下错误:

错误1错误LNK2028:无法解析的令牌(0A00000A)“外部“ C”长__stdcall JNI_CreateJavaVM(struct JavaVM_ * *,void * *,void *)“(?JNI_CreateJavaVM @@ $$ J212YGJPAPAUJavaVM _ @@@ PAPAXPAX @ Z) struct JNIEnv_ * __cdecl create_vm(struct JavaVM_ * *)“(?create_vm @@ $$ FYAPAUJNIEnv _ @@ PAPAUJavaVM _ @@@@ Z)c:\ Temp \ CLRTest \ JBridge \ JBridge \ JBridge.obj JBridge
错误2错误LNK2019:未解析的外部符号“外部“ C”长__stdcall JNI_CreateJavaVM(struct JavaVM_ * *,void * *,void *)“(?JNI_CreateJavaVM @@ $$ J212YGJPAPAUJavaVM _ @@@ PAPAXPAX @ Z)在函数” struct JNIEnv_ * __cdecl create_vm(struct JavaVM_ * *)“(?create_vm @@ $$ FYAPAUJNIEnv _ @@ PAPAUJavaVM _ @@@@ Z)c:\ Temp \ CLRTest \ JBridge \ JBridge \ JBridge.obj JBridge
错误3错误LNK1120:2无法解析的外部文件c:\ temp \ CLRTest \ JBridge \ Debug \ JBridge.dll JBridge

最佳答案

解决方法是通过使用LoadLibrary(“ path / to / jvm”)动态加载JVM。然后调用本机函数。

关于java - 使用C++/CLI从Visual C/C++调用Java方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9999913/

10-10 09:06