java 调用第三方 动态库

public class TestJava{
{
System.loadLibrary("test");
}
public native int add(int a,int b);    public static void main(String argvs[])
    {

            TestJava ts=new TestJava();
            System.out.println(ts.add(4,5));
    }
}

c++ test.h

#ifndef TEST_H
#define TEST_H
int add (int a,int b)
#endif
test.cpp

#include "test.h"

int add (int a,int b)
{
return a+b;
}

编译libtest.so
g++ -fPIC -shared test.cpp -olibtest.so

编译运行java
javac TestJava.java
java TestJava

报错如下:

Exception in thread "main" java.lang.UnsatisfiedLinkError: TestJava.add(II)I
at TestJava.add(Native Method)
at TestJava.main(TestJava.java:11)
这个什么原因,请指教。


ITMISS
浏览 614回答 4
4回答

元芳怎么了

用法错误,根据JNI 官方提供的文档,使用JNI调用第三方动态库需要 用javah编译生成头文件,根据这个头文件编译生成动态库才能调用成功,如果单纯调用第三方库的话推荐使用JNA 或者jnative这些都是可以的

波斯汪

代码有问题吧public class TestJava{ static { System.loadLibrary("test"); } public native int add(int a,int b);    public static void main(String argvs[])     {             TestJava ts=new TestJava();             System.out.println(ts.add(4,5));     } }

达令说

兄弟动态库,有加载进去吗?你动态库加载的路径对吗?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java