Java native library System.loadLibrary失败,出现不满意的链接错误

Java native library System.loadLibrary失败,出现不满意的链接错误,java,c++,native,Java,C++,Native,我尝试在java中使用一个本地C++库。 当我把它装上 System.loadLibrary(filename); 我得到一个错误: java.lang.UnsatifiedLink错误: 不应出现目录分隔符 在库名称中:C:\HelloWorld.dll 有什么办法可以解决这个问题吗?只要使用: System.loadLibrary("HelloWorld"); // without c:\ and without ".dll" extension 另外,请确保库路径上有HelloWorl

我尝试在java中使用一个本地C++库。 当我把它装上

System.loadLibrary(filename);
我得到一个错误:

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

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

只要使用:

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

另外,请确保库路径上有
HelloWorld.dll

loadLibrary需要不带路径和扩展名的文件名

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


我用JNA做的

JNA是调用本机函数的一种简单方法,它提供了用于完成此任务的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);
        }

您可以在

上找到文档。令人惊讶的是,还可以使用以下内容:

    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
本机库的代理接口-0 Javadoc说:

加载库

公共静态对象 loadLibrary(字符串名称, 类接口(类)

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

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

线程“main”中出现异常 java.lang.UnsatifiedLink错误:无法 加载库 'C:\workspace\jna\src\lib\Tester32.dll': 无法找到指定的模块 找到了


好的,我在没有C:的情况下尝试它,我得到了一个错误:java.lang.UnsatisfiedLinkError:java.library.path中没有HelloWorld.dll。如何设置本机路径?我在properties->Java Build Path->Libraries中尝试了它,但它无法运行更通用的howto: