Я использую Ubuntu 10.04 с Omnet++ 4.0p1 и JSimpleModule (который использует SWIG для создания оболочек Java для методов C++, найденных в Omnet++). Я пытаюсь создать симуляцию на Java, используя две вышеуказанные библиотеки, и когда я пытаюсь создать проект, я получаю «Неопределенная ссылка на JNI_CreateJavaVM» как ошибку в JUtil.cc (код, предоставленный JSimpleModule). Я огляделся, включив все нужные библиотеки, и все равно ничего не исправил. В 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");
}
Если кто-то знает что-нибудь о том, как это исправить, это будет очень признательно. Спасибо.
jvm
файл статической библиотеки в своем проекте? - person nabroyan   schedule 19.08.2013-ljvm
после файла, который использует эту библиотеку. Но если я компилирую в Eclipse, как мне это сделать? - person user2049080   schedule 20.08.2013client
- person nabroyan   schedule 20.08.2013-L/usr/lib/jvm/java-6-openjdk/jre/lib/i386/client/libjvm.so -ljvm
, и я все еще получаю сообщение об ошибке. - person user2049080   schedule 21.08.2013