Java本机库System.loadLibrary失败,出现UnsatisfiedLinkError

时间:2011-03-22 09:11:32

标签: java c++ native

我正在尝试在Java中使用本机C ++库。

当我用

加载它时
System.loadLibrary(filename);

我收到错误:

  

java.lang.UnsatisfiedLinkError中:   不应出现目录分隔符   在库名中:C:\ HelloWorld.dll

我有什么想法可以解决这个问题吗?

4 个答案:

答案 0 :(得分:4)

loadLibrary需要没有路径和扩展名的文件名。

如果您想使用完整路径,可以尝试使用System.load()方法。

java.lang.System API

答案 1 :(得分:3)

只需使用:

System.loadLibrary("HelloWorld"); // without c:\ and without ".dll" extension

另外,请确保您的图书馆路径上有HelloWorld.dll

答案 2 :(得分:0)

我用JNA做到了......

JNA是一种调用Native函数的简单方法,它提供的NativeLibrary类可用于完成此任务:

//调用本机函数的Java代码

dll = NativeLibrary.getInstance(Mydll);

Function proxy;

proxy = dll.getFunction(Utils.getMethods().get("MyMethodEntryPoint"));
        byte result[] = new byte[256];
        int maxLen = 250;
        String strVer = "";
        Object[] par = new Object[]{result, maxLen};
        intRet = (Integer) proxy.invoke(Integer.class, par);
        if (intRet == 0) {
            strVer = Utils.byteToString(result);
        }

您可以在http://jna.java.net/

找到文档

答案 3 :(得分:-1)

令人惊讶的是,也可以使用以下内容:

    final File dll = new File("src/lib/Tester32.dll");

    Test32 test32 = (Test32) Native.loadLibrary(dll.getAbsolutePath(), Test32.class);

    System.out.println(test32.toString() + " - " + test32.GetLastError());

输出:

Proxy interface to Native Library <C:\workspace\jna\src\lib\Tester32.dll@387842048> - 0

Javadoc说:

  

的LoadLibrary

     

public static Object   loadLibrary(String name,                                    类interfaceClass)

     

将库接口映射到给定的   共享库,提供显式   接口类。如果name为null,   尝试映射到当前   过程

如果我将Tester32.dll文件夹中的.\src\lib重命名为其他内容,则会发生以下异常:

  

线程“main”中的异常   java.lang.UnsatisfiedLinkError:无法使用   加载库   'C:\工作空间\ JNA \ SRC \ lib中\ Tester32.dll':   指定的模块不能   找到。

相关问题