解决:java调用Jni.dll时找不到依赖库的问题(Can't find dependent libraries)

5 篇文章 0 订阅

        背景:我的工作是C++,目前开发一个模块,针对java调用的,所以需要开发一个Jni动态库,暂定名字:"AJni.dll";这个动态库是依赖的是核心库“B.dll”还有用到mfc。

        开发完成用java测试时发现,当com包放在核心库目录bin下时,程序无问题;当放在其他目录下,程序会报错:

Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\...\bin\AJni.dll: Can't find dependent libraries

        提示找不到依赖库,把bin目录配置到环境变量中没有问题;

        那么问题原因就出来了:还是环境变量的问题,bin目录配置到环境变量中就正常运行。

        分析:java中Load(AJni.dll)时,因为AJni.dll还需要依赖其他的库(比如mfc的库,注意:动态链接B.dll是在程序运行后执行loadlibrary时才会加载B.dll),而在java的当前工作目录下找不到这个依赖库,导致报错,所以第一步想法,是先将Jni项目属性设置为静态库中使用mfc,并将属性c++中代码生成设置为多线程(MT),如图:

 

       

        将生成的dll替换过去,运行程序,原来的错误没有了,现在会报cpp程序中的加载库失败的错误,这个也是环境变量(应该说是工作目录)的问题,所以第二步操作就是,在Jni.cpp代码中修改:接口Start(...)中,加载接口库B.dll之前先设置当前工作目录(因为调用Start接口传的参数就是接口库的路径,直接把这个路径设置为工作目录),在加载完以后再将原来的工作目录设置回来。如图:

 

        最后再测试,就成功了。

 

        思想:找不到依赖库就还是路径和环境变量的问题,可以尝试通过设置工作目录来解决。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值