gpt4 book ai didi

java - 何时重新编译 JNI 绑定(bind)和客户端代码?

转载 作者:行者123 更新时间:2023-12-02 00:54:59 26 4
gpt4 key购买 nike

假设我有:

  1. C 库 libfoo ,
  2. 一个包裹org.foo.jni JNI 绑定(bind)到 libfoo ,并且
  3. 一个包裹com.user.of.foo客户端代码。

显然,如果函数org.foo.jni触及 libfoo更改,我需要重新编译 org.foo.jni 中的类。而且,同样明显的是,如果方法 com.user.of.foo触及 org.foo.jni更改,我需要重新编译 com.user.of.foo 中的类。但是...

  • 如果我改变libfoo要修复错误,但不更改接口(interface),我是否必须重新编译 org.foo.jni 中的类?
  • 如果我将界面更改为libfoo ,但仅限于未从 org.foo.jni 调用的函数中,我是否必须重新编译 org.foo.jni 中的类?
  • 如果我重新编译 org.foo.jni 中的类由于libfoo中的一些变化,但不要将接口(interface)更改为 org.foo.jni ,我是否必须重新编译 com.user.of.foo 中的类?

最佳答案

If I change libfoo to fix a bug, but don't change the interface, do I have to recompile the classes in org.foo.jni?

没有。如果接口(interface)没有改变,那么java代码/接口(interface)代码不需要重新编译。这是 JNI 代码的力量的一部分 - 接口(interface)可以保持不变,而底层系统特定的实现可以改变。

If I change the interface to libfoo, but only in functions not called from org.foo.jni, do I have to recompile the classes in org.foo.jni?

无论你是否必须,你都应该这样做,IMO。这些类可能会起作用,尽管如果你错了,你会得到一个异常(UnimplementedMethod 异常,iirc)

If I recompile the classes in org.foo.jni because of some change in libfoo, but don't change the interface to org.foo.jni, do I have to recompile the classes in com.user.of.foo?

不,与您第一个问题中的原因相同。接口(interface)的要点在于,两者是不同的关注点,可以单独开发和编译。

考虑 JNI 的一种方法是使用串行端口的示例。串口的底层实现必须遵守接口(interface),Java 的调用也必须遵守接口(interface)。两者可以在不同的时间单独开发(事实上几乎总是如此)。如果界面发生变化,两者都必须更改才能更新到新界面。

希望有帮助。

关于java - 何时重新编译 JNI 绑定(bind)和客户端代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1208214/

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