java – JNI – 本机方法的UnsatisfiedLinkError

我正在运行Windows XP.显然JNI和UnsatisfiedLinkError齐头并进……我注意到大多数时候,链接错误看起来像这样:

java.lang.UnsatisfiedLinkError: no whatever.dll in java.library.path

但这不是我的问题; Java可以找到我的DLL.我收到一个错误,让我觉得我的方法命名错误

java.lang.UnsatisfiedLinkError: NativeTest.nativemethod(lJava/lang/String;)Z

我曾尝试在StackOverflow上查看一些类似的问题,如this one,this one,this one,this onethis one,但这些方法都没有奏效.我还在Ubuntu论坛上找到了this thread,看起来我遇到了完全相同的问题,但提问者没有说他们如何解决自己的问题(这真的很糟糕).所有谷歌搜索都给了我一个与java.library.path相同的错误.

这是我的实际代码.

NativeTest.java

class NativeTest
    {

    public static native boolean nativemethod (String arg);

    public static void main (String[] args)
        {
        System.out.println(nativemethod("0123456789"));
        System.out.println(nativemethod("012"));
        }

    static { System.loadLibrary("NativeTest"); }

    }

NativeTest.h

/* DO NOT EDIT THIS FILE - it is machine generated */
#include 

NativeTest.c

#include Box(NULL,"text","title",MB_OK);
    int len = (*Jenv)->GetStringLength(Jenv,Jarg);
    return (jboolean)(len > 5);
    }

在cmd.exe中:
(gcc命令是我在互联网上找到的各种命令的大杂烩.)

>javac NativeTest.java

>javah -jni NativeTest

>gcc -shared -I
最佳答案
经过一段时间的乱码和谷歌搜索解决相同的问题后,我发现GCC不会生成JVM可以解析符号的DLL.但是可以将正确的命令行args传递给GCC然后它可以工作:

请参阅有关该主题this MinGW帖子.需要传递“-D_JNI_IMPLEMENTATION_ -Wl,– kill-at”作为附加标志.不知道是否需要所有这些或仅仅是第一位.

相关文章

ArrayList简介:ArrayList 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增...
一、进程与线程 进程:是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。 线程...
本文为博客园作者所写: 一寸HUI,个人博客地址:https://www.cnblogs.com/zsql/ 简单的一个类...
#############java面向对象详解#############1、面向对象基本概念2、类与对象3、类和对象的定义格式4、...
一、什么是异常? 异常就是有异于常态,和正常情况不一样,有错误出错。在java中,阻止当前方法或作用域...
Collection接口 Collection接口 Collection接口 Collection是最基本的集合接口,一个Collection代表一组...