- 浏览: 252781 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (298)
- 工作感悟 (6)
- java基础 (23)
- 计算机硬件知识 (1)
- 计算机网络知识 (2)
- Struts (3)
- Srping (4)
- hibernate (0)
- ibatis (0)
- webservice (4)
- Thread (22)
- maven (5)
- ubuntu/linux/centos/redhat (46)
- SSO (1)
- ESB (0)
- 工作流 (0)
- oracle (15)
- 云计算 (1)
- hadoop (1)
- nosql (0)
- mysql (3)
- sqlserver (0)
- jquery (0)
- 分布式 (3)
- 集群 (0)
- 设计模式 (2)
- EJB (0)
- map (0)
- cache (5)
- Niginx+varnish+squid+Ats (14)
- Apache (0)
- 工作/职业规划 (0)
- Scala & Groovy (1)
- English (4)
- 数据结构/算法 (6)
- 开发工具 (5)
- 测试 (2)
- Exception (0)
- 定时器 (3)
- j2ee (2)
- 部署 (1)
- Openssl (1)
- 操作系统 (3)
- kvm (13)
- libvirt (5)
- PostgreSql (5)
- 虚拟化 (3)
- 概念理解 (1)
- virt-manager (1)
- RESTful (3)
- 其它 (4)
- ssh2 (14)
- windows (1)
- 房产 (2)
- svn (1)
- 手机 (1)
- ant (1)
- flume (2)
- sqoop (1)
- fastdfs (5)
- log4j (1)
- SPDY (1)
- mongodb (2)
- MQ (2)
- Mina (1)
- dubbo (4)
- PMP (1)
- Webshpere (2)
- jvm (1)
- Btrace (1)
- zookeeper (7)
- UML (1)
- spring cloud (6)
- spring boot (5)
- storm (0)
- 软件管理 (1)
- elasticsearch (1)
- 协议 (2)
- docker (1)
- 性能 (2)
- 安全 (1)
- 代码规范 (1)
- mqtt (1)
- lombok (1)
- 车联网 (1)
- kafka (1)
最新评论
1.package com.bsp.zauto.common; 2. 3.public class JavaNativeCall { 4. 5. static { 6. System.load(System.getProperty("user.dir")+"/lib/MSVCRTD.dll"); 7. System.load(System.getProperty("user.dir")+"/lib/MFC42D.dll"); 8. System.load(System.getProperty("user.dir")+"/lib/getcpu.dll"); 9. } 10. 11. public native int getCpuUsageRatio(int cputime); 12. /** 13. * @method main 14. * @return void 15. * @date 2011-9-12 下午06:39:19 16. * @param args 17. * @decription (描述) 18. */ 19. public static void main(String[] args) { 20. // TODO Auto-generated method stub 21. JavaNativeCall jc = new JavaNativeCall(); 22. System.out.println(jc.getCpuUsageRatio(1000)); 23. } 24.}
最近在做一些java开发的时候,需要调用操作系统底层的一些东西,所以我用c++ 写了一个dll动态库文件,通过java的JNI进行调用。dll 文件生成之后 在本机用java调用没有问题, 但是换了一台主机就报错了,报错如下:
java.lang.UnsatisfiedLinkError: D:\workspace_bsp\myzauto\lib\getcpu.dll: Can't find dependent libraries。
大概意思是找不到依赖库。
由于是第一次用java调用dll动态库,所以不知道这个问题该怎么解决。在网上查了一天都没有结果,网上也没有解决方案。只知道缺少依赖的dll 。 但是我不知道 缺少哪些动态库。于是我就从想办法找如何查找缺失依赖库的办法,终于在网上找到一个工具,可以查看你所用的 dll的依赖库,如我的(getcpu.dll)。
工具的名字为《DLL依赖查看工具》。见附近下载。
解压, 双击打开DLL依赖查看工具 ,打开你得dll文件(如:getcpu.dll);显示结果如图(见附件,由于不知道怎么插入图片)
图片中带有黄色问号的是缺失的dll文件, 你在网上下载缺失的 dll文件(例如我缺失的 MSVCRTD.dll 和 MFC42D.dll)。
下载成功后,加载进去,或者放在 system32目录下。 即可。然后 再用java调用getcpu.dll 就成功了。
之前没加缺失dll库文件时的代码:
package com.bsp.zauto.common; 2. 3.public class JavaNativeCall { 4. 5. static { 6. System.load(System.getProperty("user.dir")+"/lib/getcpu.dll"); 7. } 8. 9. public native int getCpuUsageRatio(int cputime); 10. /** 11. * @method main 12. * @return void 13. * @date 2011-9-12 下午06:39:19 14. * @param args 15. * @decription (描述) 16. */ 17. public static void main(String[] args) { 18. // TODO Auto-generated method stub 19. JavaNativeCall jc = new JavaNativeCall(); 20. System.out.println(jc.getCpuUsageRatio(1000)); 21. } 22.}
运行报错:
java.lang.UnsatisfiedLinkError: D:\workspace_bsp\myzauto\lib\getcpu.dll: Can't find dependent libraries。
加载后代码:
1.package com.bsp.zauto.common; 2. 3.public class JavaNativeCall { 4. 5. static { 6. System.load(System.getProperty("user.dir")+"/lib/MSVCRTD.dll"); 7. System.load(System.getProperty("user.dir")+"/lib/MFC42D.dll"); 8. System.load(System.getProperty("user.dir")+"/lib/getcpu.dll"); 9. } 10. 11. public native int getCpuUsageRatio(int cputime); 12. /** 13. * @method main 14. * @return void 15. * @date 2011-9-12 下午06:39:19 16. * @param args 17. * @decription (描述) 18. */ 19. public static void main(String[] args) { 20. // TODO Auto-generated method stub 21. JavaNativeCall jc = new JavaNativeCall(); 22. System.out.println(jc.getCpuUsageRatio(1000)); 23. } 24.}
运行成功。
这个问题网上没有明确解决帖子,研究了一天才解决。写此文章,望大家少走弯路。
注意事项:
1:依赖库的顺序。
System.load(System.getProperty("user.dir")+"/lib/MSVCRTD.dll");
System.load(System.getProperty("user.dir")+"/lib/MFC42D.dll");
System.load(System.getProperty("user.dir")+"/lib/getcpu.dll");
这个顺序须按照你的调用依赖库的顺序排列。 如果顺序写反了,依然会报 Can't find dependent libraries的错。
所以,如果把所需的依赖库都加载了,还报错,试着修改这几个依赖库的顺序。
发表评论
-
SequenceInputStream 合并流与切割流
2017-09-27 15:06 377将多个流合并成一个流 SequenceInputStrea ... -
java io 之管道(PipedOutputStream和PipedInputStream)的简介,源码分析和示例
2017-09-27 10:39 272java 管道介绍 在java中, ... -
Java通过Executors提供四种线程池
2017-09-27 10:21 439Java通过Executors提供四种线程池,分别为: new ... -
Java同步注解(Annotation)解释
2017-09-18 18:18 995JDK 5.0 以后增加了注解。就是@后面加一个名称。有其自身 ... -
url参数中出现+、空格、=、%、&、#等字符的解决办法
2017-03-08 15:31 374url出现了有+,空格,/,?,%,#,&,=等特殊符 ... -
Eclipse远程调试之Socket Attach与Socket Listen
2014-08-21 13:52 1643打个比方,被远程debug/监视 的进程就是一个风度翩翩的美少 ... -
java 远程调试备忘
2013-12-11 16:45 845远程调试java程序 http://hi.baidu.com ... -
[转贴]System.getProperty()参数大全
2013-11-20 15:39 456一直做Web应用一般不会用到这些东西,今天在搞一个代码生成器的 ... -
Java Daemon线程
2013-09-05 13:27 598所谓守护线程就是运行 ... -
DelayQueue队列研究
2013-08-07 15:40 6401.DelayQueue 是一个无界的BlockingQue ... -
java 原语
2013-07-18 13:20 1155介绍 操作系统用语范畴 ... -
精巧好用的DelayQueue
2013-07-03 11:13 632我们谈一下实际的场景吧。我们在开发中,有如下场景 a) 关闭 ... -
log4j的配置文件备份.[成功测试]
2013-06-25 14:29 8991.在项目的config目录下,新建配置文件 log4j.xm ... -
log4j的xml配置详细
2013-06-24 13:48 584这是log4j默认的配置,我们先熟悉一下 <!-- ... -
java用log4j记录日志的基本方法
2013-06-24 10:57 563Log4j基本使用方法 Log4j由三个重要的组件构成: ... -
java 堆 栈
2013-06-21 16:53 557由String看Java堆栈问题,包括==以及equal()。 ... -
Java ThreadPoolExecutor思想介绍
2013-06-14 16:31 573一、简介 线程池类为 j ... -
JDK线程池的ThreadFactory
2013-06-14 16:10 771JDK线程池:Executors.newFixedThread ... -
java 中到底什么叫闭包
2013-03-26 13:24 1169什么是闭包 闭包的 ... -
java中的标签
2013-03-20 14:46 755Java中为了使程序结构更 ...
相关推荐
Java通过JNI调用DLL动态库,亲测试编写
完整的实现java跨平台调用C程序源码,包含JAVA源码和C源码以及编译后的demo dll。将dll放到jdk bin目录下,java 项目可以直接运行。若要修改dll可以,修改C源码后重新编译生成dll。该demo处理了多线程调用c,全局...
里面是一个java使用JNI调用的实例,包含所有情况如结构体、指针等等
假如有一个现有的 .dll/.so 文件,假如使用 JNI 技术调用,我们首先需要另外使用 C 语言写一个 .dll/.so 共享库,使用 SUN 规定的数据结构替换 C 语言的数据结构,调用已有的 ? dll/so 中公布的函数。 然后再在 Java...
在JAVA中如何通过JNI调用VC动态库,以及在如何在VC中调试
这两天要弄个JAVA调用DLL,研究了一下有点绕, java部分要生成.h头文件,所以弄了个例子在这分享下 JAVA调用DLL完整步骤 步骤里包括java部分代码及vc写的DLL代码
springboot+jna/jni调用动态so/dll库
JAVA如何调用dll:用JNI调用C或C++动态联接库原来如此简单
jni调用C++动态库,jna调用C++动态库,eclipse maven project
我们上层应用平台是使用java开发的,但开放平台是使用c++开发,虽提供给我们对应的.h头文件,但在java中来解析这些数据就显然有些复杂,在实现、效率上都可能不太理想。 解决方案: 请C++同事帮忙写个dll程序,dll去...
本资源包括JAVA工程,C++工程,C#dll测试工程
Java通过JNI调用C++接口,Demo文档描述(里面有代码),里面有Windows下调用版和linux下调用版,经本人亲自测试,可用。
利用JNI技术实现Java中调用C++编写的函数库示例程序源码,并附上参考JNI文档。 详情见本人博客:Java学习之通过JNI调用C/C++编写的dll链接库(图文教程)(http://write.blog.csdn.net/postlist)
Java JNI调用动态库(Linux、Windows)的实现步骤
[JAVA]使用JNI技术实现JAVA程序调用dll、[JAVA]使用JNI技术实现JAVA程序调用dll
本文档在三个方面叙述了java使用JNI调用C++的实例,①java与c++间没有参数传值,②java传入整型,c++返回整型,③java传入两个整型参数,c++返回整型数组。 有需要做以上几方面处理的情下载本文档,简单、清晰、一看...
JAVA如何调用dll:用JNI调用C或C++动态联接库原来如此简单
以MessageBox为引子介绍java通过JNI调用dll的事例 附介绍说明,十分实用
java通过jni调用dll动态链接库及创建dll动态链接库demo。
此工具能检查dll无法执行所需依赖的dll,解决java用jni调用 dll动态库Can't find dependent libraries错误,亲身实践,绝对给力