gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:47:12 29 4
gpt4 key购买 nike

有问题的代码是 Java 和 native 代码之间的 JNI 接口(interface)。h 文件由 javah 实用程序生成,而 cpp 文件由人创建。

如果 Java 部分被重命名,那么 javah 会生成具有相应名称的函数原型(prototype),就像它应该的那样。然而,没有什么能确保 cpp 文件中的函数也被重命名——所有编译都像往常一样。仅当 Java 代码在运行时调用 native API 时才会出现此问题。

在编译过程中,如何发现 javah 生成的 h 文件与人为生成的实现 cpp 文件不匹配?

最佳答案

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

例如在(比方说)generated_check.cpp 中创建一个使用虚拟参数调用原型(prototype)的函数(但永远不要调用它):

#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,并导致构建错误如果新的 generated.h 与旧的不同。它甚至可以运行一个diff 程序来给你一条错误消息来查明变化。

关于c++ - 有没有办法确保 C++ .h 与相应的 C++ .cpp 文件匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13632884/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com