有没有办法确保C ++ .h匹配相应的C ++ .cpp文件?

时间:2012-11-29 19:06:44

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

有问题的代码是Java和本机代码之间的JNI接口。 h文件由javah实用程序生成,而cpp文件由human创建。

如果重命名了Java部分,则javah会生成具有相应名称的函数原型,就像它应该的那样。但是,没有什么可以确保cpp文件中的函数也被重命名 - 所有编译都像往常一样。只有当Java代码在运行时调用本机API时才会出现此问题。

如何在编译期间捕获javah生成的h文件与人类生成的实现cpp文件不匹配?

1 个答案:

答案 0 :(得分:2)

如何在C ++代码中的某处引用生成的函数声明?

E.g。 in(say)generated_check.cpp创建一个函数,用虚拟参数调用原型(但从不调用它):

#include "generated.h" // your javah output

static void neverCalled() {
     // Compiler errors here mean that the functions have changed:
     Java_com_example_package_MyClass_myFunc1(0, 0, 0);
     Java_com_example_package_MyClass_myFunc2(0);
}

编辑,以回应您的评论:

另一种(或补充)方法是创建一个脚本,该脚本作为构建过程的一部分运行,并在运行javah之前备份旧的generated.h,如果新的{{{},则会导致构建错误1}}与旧的不同。它甚至可以运行 diff 程序来给你一个错误信息来确定变化。