JNI绑定C ++和JAVA:未定义的符号:__ gxx_personality_v0

时间:2015-02-24 21:58:46

标签: java c++ java-native-interface

我正在尝试使用JNI将Java swing前端链接到c ++后端。我能够为该类生成一个类文件和头文件。我也可以编写.cpp文件并生成库文件。但是当我尝试运行我的应用程序时,我得到一个错误未定义的符号:__ gxx_personality_v0。 我在stackoverflow上经历了很多例子,但在我的情况下没有一个工作。我确定我有libgcc,libgcj和libstd ++。还在JNI头文件的顶部添加了pragma GCC java_exceptions。 但这些都没有奏效。

Java文件 - InitJNI.java

public class InitJNI {
public native String callMethod(String str);

public static void init(String s){
    System.out.println("-------inside InitJNI.java--------");
    System.loadLibrary("eg1");
    System.out.println("Library loaded in InitJNI--------");
    InitJNI init1 = new InitJNI();
    init1.callMethod(s);
}

}

JNI头文件 - InitJNI.h

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class org_openscience_jchempaint_application_InitJNI */

#ifndef _Included_InitJNI
#define _Included_InitJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     InitJNI
 * Method:    callMethod
 * Signature: (Ljava/lang/String;)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_InitJNI_callMethod
  (JNIEnv *, jobject, jstring);

#ifdef __cplusplus
}
#endif
#endif

Cpp文件 - InitJNI.cpp

#include "InitJNI.h"
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#pragma GCC java_exceptions


JNIEXPORT jstring JNICALL Java_InitJNI_callMethod
  (JNIEnv * env, jobject, jstring string){
    char buf[128];
    const char *str = env->GetStringUTFChars(string, NULL);
    printf("%s", str);
    env->ReleaseStringUTFChars(string, str);
}

我正在尝试使用命令创建共享库:

g++ -shared -fpic -o libeg1.so -I/usr/java/include -I/usr/java/include/linux InitJNI.cpp 

生成libeg1.so文件。但我的应用程序没有运行。它给了我 未定义的符号:__ gxx_personality_v0 对此有任何帮助表示赞赏。 谢谢!

0 个答案:

没有答案