Windows下Java通过Jni调用C/C++(x64, 多层依赖)

前言

客户(证券公司)要求把T2协议的适配改为windows版本,以方便添加GUI进行操作。我的工作等于说是基于恒生的T2的sdk的dll,生成我们自己的dll(依赖恒生的dll),供我们的同事编写的上层应用(java编写)调用

windows下Java通过JNI调用C/C++

可参考链接:
Windows下使用Java Jni调用C/C++初探
需要特别注意的问题有2个:
1、需要在工程的配置里,引入jdk相关的头文件或者其目录;
2、设置生成的dll的系统属性,就是dll是32位还是64位的,现在绝大部分情况都是64位的,需要注意一下;

问题及解决

1、引入第三方(T2) dll

由于我引入的dll只有1个,并且确定这个dll是一直不会改变的,所以是直接在vs2010的项目工程里引入的
可参考链接:
VS2010引入DLL设置
头文件也是一样,加入到工程中

2、编译失败,提示找不到某个变量或者结构体或者类的定义

可参考链接
error LNK2019: 无法解析的外部符号
其中最主要的一条是:
点击链接器–>输入–>附加依赖项–>编辑,添加用到的库文件的名称!!!!!

3、编译选择是64位,但是同事通过java调用时,总是提示是32位的

这不是设置问题,如果是设置问题,可参考链接:
VS2010编写32位和64位dll环境配置,以及判断dll是多少位
我的问题在于取dll的目录错误,需要从 工程目录/x64下的debug或者release选择相应的版本

4、给同事debug版本的dll,java提示缺少MSVCP100D.dll

这个dll其实应该是微软官方的,用于debug的时候调试多线程版本(不确定理解是否正确),网上有人说可以通过在VS2010的工程里的设置关闭某个选项来去除,我最终采用的是重新生成了release版本,这里面也有小坑,就是vs2010在debug和release之间切换时,是全部需要重新配置的,这点不好,不知道为何需要这么折腾

5、java侧提示 ”can’t find dependent libraries“

这个是因为多层依赖(java–>a.dll–>b.dll)导致的,直接说我这边的解决方案吧,就是在java侧先显式加载最底层的b.dll,再显式加载上一层的a.dll,这样就可以了
问题:
在这里插入图片描述
解决:
在这里插入图片描述
——这个问题虽然解决了,但个人认为,应该是可以通过项目设置,来由java自动加载的,只是对java不熟,没能确定更优雅的解决方案

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lqw198421

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值