原装代码拖进去能直接编译成功,但是要jni调用就得写jni函数声明,
加上 extern "c"声明和函数就报错
“Devil组”引证GPT后的撰写:
JNI是一种Java调用本地代码的机制,需要使用C/C++编写本地代码,并且需要与Java代码进行交互,其中涉及到一些语言特性和约定。可能有以下几个原因导致你遇到的问题:
缺少头文件
如果你需要在JNI中调用C/C++函数,需要包含相应的头文件,例如在JNI中调用标准库函数,需要包含<stdio.h>或<stdlib.h>等头文件。如果头文件未包含,则编译器将无法识别函数声明,导致编译错误。
编译器不支持C++语言特性
在C++中,函数名会根据其参数类型和个数进行重载,因此在C++中调用本地函数时,需要使用extern "C"语言特性来指示编译器使用C语言约定来链接函数。如果在C++代码中未使用extern "C"语言特性声明本地函数,则会导致编译错误。
函数签名不匹配
在JNI中,本地函数的签名需要与Java代码中声明的JNI函数签名匹配。如果函数签名不匹配,则会导致编译错误。要确保本地函数的签名与JNI函数的签名匹配,可以使用JNI的命令行工具javah自动生成JNI函数的声明,这样可以避免手动编写JNI函数声明时出现的错误。