f980548079 2014-07-21 12:26
浏览 363
已采纳

java 调用第三方 动态库

[code="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));
    }

}

[/code]
c++ test.h
[code="c++"]
#ifndef TEST_H
#define TEST_H
int add (int a,int b)
#endif
[/code]

test.cpp
[code="c++"]

#include "test.h"

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

[/code]
编译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)
这个什么原因,请指教。

  • 写回答

4条回答 默认 最新

  • hxfeng_helloworld 2014-07-21 21:32
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 虚拟机打包apk出现错误
  • ¥30 最小化遗憾贪心算法上界
  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝