jnative的使用始终报错
答案:3 悬赏:10 手机版
解决时间 2021-03-02 02:54
- 提问者网友:轻浮
- 2021-03-01 08:39
jnative的使用始终报错
最佳答案
- 五星知识达人网友:青尢
- 2021-03-01 08:52
jnative的使用始终报错是路径出现问题
我的路径看图
public class HelloWorld {
//本地方法
public native void sayHello(User u);
//加载动态库
static {
System.loadLibrary("hello");
}
//本类方法
public void sayHello(String str){
System.out.println(str);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
HelloWorld hw = new HelloWorld();
//java
hw.sayHello("Hello World for java!");
//jni
User u = new User(10,"zou");
hw.sayHello(u);
}
}
1、环境设置。
JNative的调试信息需要打开才能更清楚些,要不总是说没加载库,跟没说一样。
System.setProperty("jnative.debug", "true");
如果调试信息里有System.LoadLibrary(),说明没有加载JNativeCpp.dll,指定全路径即可,双斜杠哦。
System.setProperty("jnative.loadNative", "D:\\Test\\JNativeCpp.dll");
2、lib库路径问题
windows
在windows下需要把调用的dll路径设置到环境变量PATH中,除非你不介意拷到win32中,dll依赖的库也得在PATH或win32中。
linux
linux下同样需要设置环境变量,编辑bashrc,添加 export LD_LIBRARY=so路径,依赖的库也得在PATH中,除非都放在/usr/lib/下
3、lib库名称问题
无论linux还是windows在JNative的构造函数中的lib库名字为库全名,包括扩展名dll、so,而且so需要包括前面的‘lib’,貌似与网上说的不太一样。
4、资源释放问题
有些设备需要先初始化在操作,最后释放,所有功能都分散在不同函数中,JNative需要有个静态的实例,每次创建调用函数时lib库依旧是加载的。
我的路径看图
public class HelloWorld {
//本地方法
public native void sayHello(User u);
//加载动态库
static {
System.loadLibrary("hello");
}
//本类方法
public void sayHello(String str){
System.out.println(str);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
HelloWorld hw = new HelloWorld();
//java
hw.sayHello("Hello World for java!");
//jni
User u = new User(10,"zou");
hw.sayHello(u);
}
}
1、环境设置。
JNative的调试信息需要打开才能更清楚些,要不总是说没加载库,跟没说一样。
System.setProperty("jnative.debug", "true");
如果调试信息里有System.LoadLibrary(),说明没有加载JNativeCpp.dll,指定全路径即可,双斜杠哦。
System.setProperty("jnative.loadNative", "D:\\Test\\JNativeCpp.dll");
2、lib库路径问题
windows
在windows下需要把调用的dll路径设置到环境变量PATH中,除非你不介意拷到win32中,dll依赖的库也得在PATH或win32中。
linux
linux下同样需要设置环境变量,编辑bashrc,添加 export LD_LIBRARY=so路径,依赖的库也得在PATH中,除非都放在/usr/lib/下
3、lib库名称问题
无论linux还是windows在JNative的构造函数中的lib库名字为库全名,包括扩展名dll、so,而且so需要包括前面的‘lib’,貌似与网上说的不太一样。
4、资源释放问题
有些设备需要先初始化在操作,最后释放,所有功能都分散在不同函数中,JNative需要有个静态的实例,每次创建调用函数时lib库依旧是加载的。
全部回答
- 1楼网友:雪起风沙痕
- 2021-03-01 10:49
楼主没有导入JNative的Jar包..或是导入没有导入好...
楼主再仔细查一下... 我想应该是这个原因...因为
它根本就找不到 add 方法!
祝楼主早日成功!
楼主再仔细查一下... 我想应该是这个原因...因为
它根本就找不到 add 方法!
祝楼主早日成功!
- 2楼网友:一把行者刀
- 2021-03-01 09:11
肯定是路径问题
我的路径看图
public class HelloWorld {
//本地方法
public native void sayHello(User u);
//加载动态库
static {
System.loadLibrary("hello");
}
//本类方法
public void sayHello(String str){
System.out.println(str);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
HelloWorld hw = new HelloWorld();
//java
hw.sayHello("Hello World for java!");
//jni
User u = new User(10,"zou");
hw.sayHello(u);
}
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯