Java native library System.loadLibrary失败,出现不满意的链接错误
我尝试在java中使用一个本地C++库。 当我把它装上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
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: