关于jni中用到package后 dll该如何放置的问题

zheng8071 2004-09-01 05:57:13
小弟最近研究jni
下面是使用jni的class的源码
package test;
public class testdll
{
static { System.loadLibrary("JSPgoodluck");}
public native static int get(); public native static void set(int i);
}
在我通过javah testdll生成.h头文件 然后通过它生成dll动态库文件 可是我在一个程序里调用这个testdll来操作JSPgoodluck这个动态库是总是报UnsatisfiedLinkError这个错误 这是System.loadLibrary没有找到动态库而报的异常 可我的动态库已经放在了testdll的相同目录中呀
我把他放过各种地方如system32下 classpath所指定的路径下 都不行 依然报哪个异常 请问到地放在那里才是正确的呢 我不用package test;这句就能够找到动态库 用了就不行 请各位大虾帮帮忙
...全文
267 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zheng8071 2004-09-02
  • 打赏
  • 举报
回复
我的动态库的set函数名是
Java_test_0005casptestdll_set 而不是
Java_test_asptestdll_set 不知道这个有没有区别呢 我是用
javah test\asptestdll命令生成的头文件
stepwin 2004-09-02
  • 打赏
  • 举报
回复
1/第一种情况是你的接口文件在包TEST中,而在生成的头文件中却并没有表现出来。
2/第二种情况是DLL找不到。DLL的位置也有讲究,如果写的是应用程序,需要放在EXE文件的根目录下即可,如果是WEB服务,需要将接口文件和DLL打入同一个JAR包中调用。

详细说明在软件大佬的源码与讲解中有一个JNI技术实例,有范例,有讲解,你可以去看看。

--
软件大佬,基于软件行业的研发、学习、交易、服务、管理的网络平台,您事业开始的地方。请访问www.softboss.com
zheng8071 2004-09-02
  • 打赏
  • 举报
回复
System.getProperty("user.dir")的返回结果是我的当前工作目录下 没有用我试过了
我现在将dll置于bin目录下 就出现
java.lang.UnsatisfiedLinkError:set
at test.asptestdll.set<Native Method> 好像动态库找到了 只是set方法没有找到
而我不将dll置于bin目录下时则出现
java.lang.UnsatisfiedLinkError:no JSPgoodluck in java.libraray.path的异常

这是为什么呢
registered 2004-09-02
  • 打赏
  • 举报
回复
如果是用
javah test.asptestdll
生成的 .h 文件应该没问题

上面的情况明显是没有找到库文件
假设当前目录是 dir
test 目录位置是 dir/test
class 文件位置是 dir/test/testdll.class
dll 文件位置是 dir/JSPgoodluck.dll
这时你要在 dir/ 下面输入命令: java test.testdll
这样才能保证正常运行
切记: 访问包内文件需要用"全名"!
registered 2004-09-01
  • 打赏
  • 举报
回复
默认情况下是工作目录
你也可以通过设置系统属性 java.library.path 来改变本地库目录
例如:
java -Djava.library.path=.\text test.testdll
Acylas 2004-09-01
  • 打赏
  • 举报
回复
看看System.getProperty("user.dir")是那就放那
registered 2004-09-01
  • 打赏
  • 举报
回复
放在工作目录(Working Directory)
如果是用 IDE 的话, 情况跟楼上的兄弟说法相符

需要注意的是
你生成 testdll.h 文件的时候必须使用"类的全名"
javah test.testdll
生成的文件函数名应该是
Java_test_testdll_get
Java_test_testdll_set
"包, 类, 方法"三者有一名称改变就要重新生成头文件, 重新写 C 程序...
kingfish 2004-09-01
  • 打赏
  • 举报
回复
如果用jb等IDE,与工程文件放在一起
boreboluomi 2004-09-01
  • 打赏
  • 举报
回复
up

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧