gpt4 book ai didi

java - 不满意链接错误: Native method not found (NOT caused by the common cause for this error)

转载 作者:行者123 更新时间:2023-12-02 06:38:31 51 4
gpt4 key购买 nike

我正在尝试使用一个使用 JNI 的库。

我已经尝试了开发人员提供的示例应用程序,它可以工作。所以我知道这不是库中的错误。

我认为我在导入库的过程中做错了什么:

  • 将 .so 文件复制到我的 libs 文件夹中(名为 libjniRTSP.so)
  • 将 jniRTSP.java(总结如下)复制到我的项目中:

    public class jniRTSP {

    private volatile static jniRTSP libRTSP = null;

    public static jniRTSP getInstance() {
    if(null == libRTSP) {
    synchronized(jniRTSP.class) {
    if(null == libRTSP) {
    libRTSP = new jniRTSP();
    libRTSP.InitProductList();

    // DEBUG
    libRTSP.SetDebugView(1);
    }
    }
    }
    return libRTSP;
    }

    static {
    try {
    System.loadLibrary("jniRTSP");
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    public native int GetBrandEnableRecorder();
    public native int GetBrandEnableLocal();
    public native int GetBrandEnableRemote();
    ...
  • 然后在我的 onCreate() 中我尝试调用其中一个方法:

    jniRTSP.getInstance().Init(.....)

    返回错误:

    UnsatisfiedLinkError: Native method not found com.myuniquepackage.jniRTSP.InitProductList:()I

更新(修复):我不只是复制 jniRTSP java 文件,而是复制包含它的整个包,并保留相同的包名称。我不确定这是否解决了这个问题,因为包名称是问题,或者是否因为它需要该包中的其他 java 文件之一。虽然我很确定它是否丢失了文件,但它会在编译时提示。

最佳答案

相当肯定,C 代码中的包声明必须与 Java 代码中的相同。

因此,jniRTSP 类应位于 Java 的 com.myuniquepackage 包中,并声明了 native 方法 InitProductList,而 C 代码应将方法声明为 Java_com_myuniquepackage_jniRTSP_InitProductList

通过移动类,您可能会破坏链接,更改 Java 中的包声明以匹配演示项目,看看它是否有效,如果有效,您可以将其更改回来,然后在 C 代码中更改它,这是一个有点耗时,但很简单。

关于java - 不满意链接错误: Native method not found (NOT caused by the common cause for this error),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19392756/

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