大家好,我想用jni給我的C++包殼,以便他用JAVA程序調用
我編譯的時候發現jni.h報出了大量的錯誤
我用gcc -c jni.h 返回:
In file included from jni.h:27:
jni_md.h:16: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘jlong’
jni.h:108: error: expected specifier-qualifier-list before ‘jlong’
jni.h:202: error: expected ‘)’ before ‘*’ token
jni.h:204: error: expected ‘;’ before ‘jclass’
jni.h:1877: error: expected ‘)’ before ‘*’ token
jni.h:1879: error: expected ‘;’ before ‘jint’
jni.h: In function ‘__declspec’:
jni.h:1917: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘JNI_GetDefaultJavaVMInitArgs’
jni.h:1919: error: expected declaration specifiers before ‘__declspec’
jni.h:1922: error: expected declaration specifiers before ‘__declspec’
jni.h:1926: error: expected declaration specifiers before ‘__declspec’
jni.h:1929: error: expected declaration specifiers before ‘__declspec’
jni.h:1930: error: expected ‘{’ at end of input
-----------------------
如果我要是用g++ 編譯,返回的錯誤更多?請問這是為什么
5 个解决方案
jni.h肯定包含了其他系統頭文件或者自定義文件你沒有包含。
應該使用-I把jni的路徑加入gcc的頭文件搜索路徑。
不過你怎么直接編譯起頭文件來了?
你想給C++程序包殼子的方法是把jni.h文件include到c++文件中,然后編譯那個C++文件。
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */
#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: sayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_sayHello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif