写了个java类:public class A {
public native void say();
static {
System.loadLibrary("aaa");
}
}
在类B中调用:public class B { /**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根
System.out.println("java.library.path :"+System.getProperty("java.library.path"));
A a=new A();
a.say();
}}
在c++中生成了aaa.dll后放到了和A.class,B.class同目录下,但是执行报:
java.library.path :C:\Program Files\Java\jre1.6.0\bin;.;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\MinGW\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Java\jdk1.6.0\bin;C:\Program Files\Microsoft Visual Studio 8\VC\bin
Exception in thread "main" java.lang.UnsatisfiedLinkError: A.say()V
at A.say(Native Method)
at B.main(B.java:11)
请问这是什么问题,我感觉不像是没找到dll文件。。
public native void say();
static {
System.loadLibrary("aaa");
}
}
在类B中调用:public class B { /**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根
System.out.println("java.library.path :"+System.getProperty("java.library.path"));
A a=new A();
a.say();
}}
在c++中生成了aaa.dll后放到了和A.class,B.class同目录下,但是执行报:
java.library.path :C:\Program Files\Java\jre1.6.0\bin;.;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\MinGW\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Java\jdk1.6.0\bin;C:\Program Files\Microsoft Visual Studio 8\VC\bin
Exception in thread "main" java.lang.UnsatisfiedLinkError: A.say()V
at A.say(Native Method)
at B.main(B.java:11)
请问这是什么问题,我感觉不像是没找到dll文件。。
2.Exception in thread "main" java.lang.UnsatisfiedLinkError
没有找到DLL文件
3.把A a=new A();
a.say();这两句去掉编译下就知道是DLL文件没放对地方了
Exception in thread "main" java.lang.UnsatisfiedLinkError: no abc in java.library.path
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at A.<clinit>(A.java:5)
at B.main(B.java:10)
另外
A a=new A();
a.say();
只注释掉第二句的时候是对的,System.loadLibrary("aaa");这句是在A a=new A();的时候就执行了的啊