java - 错误 : conflicting types for JNI method

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

我在 java 中有这段代码:

public native String hello(String inputs, String modems, String outputs);

C 中的这段代码:

JNIEXPORT jstring JNICALL Java_com_marakana_NativeLib_hello(JNIEnv * env, jobject obj, jstring inputs, jstring modems, jstring outputs)

我有类型冲突的错误:

error: conflicting types for 'Java_com_marakana_NativeLib_hello'
note: previous declaration of 'Java_com_marakana_NativeLib_hello' was here 
make.exe: *** [C:/workspace/marakana//obj/local/armeabi-v7a/objs/ndk_demo/ndk_demo.o] Error 1

我尝试了一个这样的例子并且它有效(但使用 int)。 有什么问题吗?

最佳答案

构建jni 代码时,您必须确保使用javah 生成的头文件与 中的native 声明匹配。类文件。

当您更改本地方法签名时,您必须:

  1. 重新编译.java文件
  2. 从生成的 .class 文件重新生成 .h 文件
  3. 确保.c文件中定义的签名与.h文件中的声明相匹配

如果您错过任何步骤,您可能最终无法重新编译 .c 文件,或者最终得到无法加载到 VM 中的非功能性 native 库。

关于java - 错误 : conflicting types for JNI method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23633511/

相关文章:

java - 简单的 Java Ant 构建问题

java - 访问和编辑自定义适配器的 subview

c++ - 性能报告 (.vspx) 在 Visual Studio 2013 中未打开(显示损坏)

c - 运行两个线程 [c]

c - 函数参数分配?

java - 如何以编程方式在Android中打开(来自NotificationListener Service的StatusBarNotification对象)通知?

java - 在 C# 中是否有与空合并运算符 (??) 等效的 Java?

c++ - 类型检查模板类参数

c++ - 更改 malloc 函数分配空间

c - ASCII 到十进制值