0

我正在使用带有 Omnet++ 4.0p1 和 JSimpleModule 的 Ubuntu 10.04(它使用 SWIG 为 Omnet++ 中的 C++ 方法制作 Java 包装器)。我正在尝试使用上述 2 个库在 Java 中创建模拟,当我尝试构建项目时,我在 JUtil.cc(由 JSimpleModule 提供的代码)中收到“未定义对 JNI_CreateJavaVM 的引用”作为错误。我一直在环顾四周,我包含了所有适当的库,但它仍然没有解决任何问题。在 Omnet++ IDE (Eclipse) 中,我包括:

/usr/lib/jvm/java-6-openjdk/include
/usr/lib/jvm/java-6-openjdk/include/linux
/usr/lib/jvm/java-6-openjdk/jre/lib/i386/client

我正在链接:

/usr/lib/jvm/java-6-openjdk/jre/lib
/usr/lib/jvm/java-6-openjdk/jre/lib/client
-ljvm

我还尝试使用带有以下参数的 opp_makemake(创建 Makefile)从终端进行编译:

-I/usr/lib/jvm/java-6-openjdk/include
-I/usr/lib/jvm/java-6-openjdk/include/linux
-I/usr/lib/jvm/java-6-openjdk/jre/lib/i386/client
-L/usr/lib/jvm/java-6-openjdk/jre/lib
-L/usr/lib/jvm/java-6-openjdk/jre/lib/client -ljvm

这是 JUtil.cc 的开头直到错误(注意:jni.h 包含在 JUtil.h 中):

#include "JUtil.h"
#include "JSimpleModule.h"

//#define DEBUGPRINTF printf
#define DEBUGPRINTF (void)

#ifdef _WIN32
#define PATH_SEP ";"
#else
#define PATH_SEP ":"
#endif

// This will come from the generated SimkernelJNI_registerNatives.cc
void SimkernelJNI_registerNatives(JNIEnv *jenv);

JavaVM *JUtil::vm;
JNIEnv *JUtil::jenv;


void JUtil::initJVM()
{
    DEBUGPRINTF("Starting JVM...\n");
    JavaVMInitArgs vm_args;
    JavaVMOption options[10];

    int n = 0;
    const char *classpath = getenv("CLASSPATH");
    if (!classpath)
        opp_error("CLASSPATH environment variable is not set");
    // FIXME remove hack once IDE builds the classpath corretcly
    const char *classpath2 = getenv("CLASSPATH2");
    std::string classpathOption = std::string("-Djava.class.path=")+(classpath2 ? classpath2 : "")+PATH_SEP+(classpath ? classpath : "");
    options[n++].optionString = (char *)classpathOption.c_str(); /* user classes */
    options[n++].optionString = (char *)"-Djava.library.path=."; /* set native library path */
    //options[n++].optionString = "-Djava.compiler=NONE";    /* disable JIT */
    //options[n++].optionString = "-verbose:jni";            /* print JNI-related messages */
    //options[n++].optionString = "-verbose:class";          /* print class loading messages */

    vm_args.version = JNI_VERSION_1_2;
    vm_args.options = options;
    vm_args.nOptions = n;
    vm_args.ignoreUnrecognized = true;

    int res = JNI_CreateJavaVM(&vm, (void **)&jenv, &vm_args);
    if (res<0)
        opp_error("Could not create Java VM: JNI_CreateJavaVM returned %d", res);

    DEBUGPRINTF("Registering native methods...\n");
    SimkernelJNI_registerNatives(jenv);
    DEBUGPRINTF("Done.\n");
}

如果有人知道如何解决这个问题,那将不胜感激。谢谢。

4

0 回答 0