当前位置: 首页 > 面试题库 >

JNI:在Path上找到了库,但没有找到Method(java.lang.UnsatisfiedLinkError)

丁英韶
2023-03-14
问题内容

我正在尝试使用JNI并获取java.lang.UnsatisfiedLinkError。与其他有关此问题的数百万个问题不同,我在自己的路径上有一个lib,甚至在删除它时也看到了异常更改。我确定我创建的dll出了点问题,但是我不确定是什么。

这是我的Java类代码:

package com;

public class Tune {
    static {
        System.loadLibrary("lala");
    }
    public static void main(String[] args) {
        Tune j = new Tune();
        System.out.println("2+6="+j.add(2, 6));
    }
    native public int add(int x,int y);
}

这是我的javah产生的头文件的节略部分:

/*
 * Class:     com_Tune
 * Method:    add
 * Signature: (II)I
 */
JNIEXPORT jint JNICALL Java_com_Tune_add
  (JNIEnv *, jobject, jint, jint);

这是我的C ++代码:

#include <jni.h>
#include <com_Tune.h>

JNIEXPORT jint JNICALL Java_com_Tune_add
  (JNIEnv * env, jobject obj, jint x, jint y) {
    return x+y;
  }

这是我从Eclipse中获得的运行时异常:

Exception in thread "main" java.lang.UnsatisfiedLinkError: com.Tune.add(II)I
    at com.Tune.add(Native Method)
    at com.Tune.main(Tune.java:9)

我读到上面的异常意味着它DID找到了库“ lala”,但是方法“ add”仍然没有定义。我在项目和教程之间看到的唯一不同是:

  • 我的使用的是软件包,而不是默认的软件包(教程真的不能这样做吗?!?!让我们变得专业吧)
    • 我的有一个返回值。
    • 我在创建dll后移动了它(由于配置了路径,因此我认为这不会破坏它。)

这怎么可能?

操作系统:Windows 7
JDK:1.6.0_31(用于x86,32位jvm)
C IDE:代码:: Blocks(该dll由代码:: Blocks IDE自动
编译)C
编译器:MinGW32-g (GNU C 编译器)

我在C:\ _ \ include中有jni.h和com_Tune.h
我在C:\ _ \ lib中有lala.dll

环境变量:
PATH:C:\ Program Files(x86)\ NVIDIA Corporation \ PhysX \
Common;%CommonProgramFiles%\ Microsoft Shared \ Windows Live; C:\ Program
Files(x86)\ AMD APP \ bin \ x86_64; C:\程序文件(x86)\ AMD APP \ bin \
x86;%SystemRoot%\ system32;%SystemRoot%;%SystemRoot%\ System32 \
Wbem;%SYSTEMROOT%\ System32 \ WindowsPowerShell \ v1.0 \; C:\ Program Files(
x86)\ ATI Technologies \ ATI.ACE \ Core-Static; C:\ Apps;%JAVA_HOME%\ bin; C:\
Program Files \ MySQL \ MySQL Server 5.5 \ bin;%MAVEN_HOME%\
bin;%HADOOP_INSTALL%\ bin ; c:\ Program Files(x86)\ Microsoft SQL Server \ 100
\ Tools \ Binn \; c:\ Program Files \ Microsoft SQL Server \ 100 \ Tools \
Binn \; c:\ Program Files \ Microsoft SQL Server \ 100 \ DTS \ Binn \; C:\
MinGW \ bin; C:\ Program Files(x86)\ GnuWin32 \ bin; C:_ \ path; C:\ _ \ lib;
C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ bin; C:\ _ \
include


问题答案:

只是猜测…您的dll是否依赖于不在路径上的另一个dll?MinGW模块通常取决于特定的C运行时库。



 类似资料:
  • 在chrome/Firefox控制台中找到xpath,但在selenium中找不到?有什么建议吗? Java代码双向: 以下是硒的作用: 线程“main”组织中出现异常。openqa。硒。TimeoutException:预期条件失败:等待元素可单击:按。xpath:/html1/body1/div2/div1/div1/div2/div2/div1/div3/div1/div[4]/div2/t

  • 我正在导入Apache Commons Math和Lemmingapex Trilateration作为处理中的外部jar库。我遵循SO的指示: 如何在处理中添加外部库 处理草图似乎工作正常,但每次运行草图时,我都会将以下错误打印到控制台。 这是处理PDE草图: 我哪里错了?有什么建议吗?

  • 问题内容: 所以我想安装 https://www.npmjs.com/package/@progress/kendo-react- grid 该软件包存在于网站上,但是当我运行命令时 我收到404错误 想法? 到目前为止,我认为用户范围是什么 第二次尝试 问题答案: 我看着我的,这就是里面的东西 与该用于评论查看文档 我注释掉了所有4行,并且能够运行 无论出于何种原因,我都没有在https://w

  • 我尝试了Hello world JNI,来自: http://home.pacifier.com/~mmead/jni/cs510ajp/ 我学习了Java类: 然后打电话进来: cpp文件如下所示: 我已切换到JDK x86并使用x86编译: 我使用了QT文件夹中的MINGW32的gcc(希望没问题) 注意:我必须添加共享,否则会出现错误: 请注意,我已经确保运行的是x32 jdk的java,并

  • 我收到这个错误消息 mylib。dll是一个JNI包装器,它使用其他C库。 当我打开mylib时。dll带有依赖项遍历器它显示所有依赖库都可用! 有没有办法检查java中找不到哪个库? 我用Visual Studio编译了第三方库,用mingw32编译了mylib。这可能是个问题吗?

  • 提示/否这里的任何解决方案都是解决我: 请帮帮我