如何在Java中加载和使用本机库? [英] How do I load and use native library in java?

查看:100
本文介绍了如何在Java中加载和使用本机库?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个Java类,调用一个本机方法并尝试加载库:

I've got a java class, calling a native method and trying to load library:

import java.io.UnsupportedEncodingException;

public class Main {

    public static native String getMyString(String s);

    /**
     * @param args
     * @throws UnsupportedEncodingException
     */
    public static void main(String[] args) throws UnsupportedEncodingException {
        // TODO Auto-generated method stub
        // System.out.println("here!");

        String s2 = getMyString("string text");
        for (Byte b : s2.getBytes("UTF-8")) {
            System.out.print(b);
            System.out.print(",");
        }

    }

    static {
        System.loadLibrary("mylib.so");
    }

}

"mylib.so"位于Main.class所在的目录中.

The "mylib.so" is in the directory, where Main.class is located.

当我运行java Main时,出现以下异常:

When I run java Main I get following exception:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no mylib.so in java.library.path
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1856)
        at java.lang.Runtime.loadLibrary0(Runtime.java:845)
        at java.lang.System.loadLibrary(System.java:1084)
        at Main.<clinit>(Main.java:24)

我该如何改变呢?

我尝试将库的完整路径设置为失败

I've tried setting library full path without success

推荐答案

执行以下操作:

  • 使用System.loadLibrary("mylib");
  • 将mylib.so复制到libmylib.so
  • 运行java -Djava.library.path =/root/Main

这篇关于如何在Java中加载和使用本机库?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆