jni动态库“%1 不是有效的win32应用程序”问题的解决以及一些windows下dll有关命令的记录

一、前因

在windows下用cmake+VS编译了一个jni动态库,再使用java测试程序调用这个动态库的时候报错:“%1 不是有效的win32应用程序”

这里是引用

对于这类问题,一般从以下几个方面考虑:

  1. 动态库文件损坏
  2. 动态库或者其依赖库文件路径错误导致找不到。(不过这种动态库本身路径错误一般会报“找不到”)
  3. 动态库架构与系统架构或者JDK架构不一致
  4. 动态库的依赖库架构不匹配

那么从这几方面考虑,一一进行排查就涉及到了一些相关的命令。

一、设置临时环境变量

命令行中使用java命令来运行测试程序加载jni动态库时,为了确保能够找到动态库,可以将动态库以及其依赖库所在的目录添加到临时环境变量Path,命令: set PATH=%PATH%;C:\Directory1\;C:\Directory2\;C:\Directory3\

二、查看JDK架构

命令1. java -version ,如下图,可以看出jdk版本是17.0.10, 架构是64位

这里是引用

命令2. java -d32 -version 或者java -d64 -version 哪个运行成功就是哪个j架构。(但是我这两个命令都出现了error,不知道为啥)

那么目前可知JDK和系统架构都是64位的,动态库也是编译的64位,但是保险起见,还是要通过命令实际看一下动态库的位数。

三、查看动态库的架构

如图,打开VS的命令行工具, 也可以直接去dumpbin.exe所在的目录下面打开cmd, dumpbin 通常位于 Visual Studio 的安装目录下的 VC\Tools\MSVC\<版本号>\bin\Hostx64\x64 或 Hostx64\x86 文件夹中

这里是引用

然后,输入命令 dumpbin /hearders a.dll ,然后看下面输出内容中“machine”的部分,后面括号中"x64"表示是64位,"x86"表示32位

这里是引用

那么到这里可以确定我的动态库本身是没有问题的,那么问题可能就出在依赖库上。

四、查看动态库的依赖项

同样打开VS的命令行工具,使用命令:dumpbin /dependents +dll/exe文件路径
如图,可以看到这些依赖库中只有第一个是一个第三方依赖库,其余几个都是windows底层库,那么需要重点关注的就是第一个依赖库。

这里是引用

首先确保这个依赖库跟报错的动态库一起都加入了环境变量中能被Java找到(第一步),然后同样检查一下这个依赖库的依赖库,发现它只依赖了一些windows底层库,没什么问题,再检查一下它的架构(第三步命令),发现它竟然是32位的!!!
好好好,问题找到了,主动态库和jdk都是64位的,偏偏这个第三方依赖库是一个32位。那么现在只需要将它替换成64位的版本,问题就解决了。(鼓掌)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1552560.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网络:计算机网络概述:网络、互联网与因特网的区别

文章目录 网络、互联网与因特网的区别网络分类 互联网因特网基于 ISP 的多层次结构的互连网络因特网的标准化工作因特网管理机构因特网的组成 网络、互联网与因特网的区别 若干节点和链路互连形成网络&#xff0c;若干网络通过路由器互连形成互联网 互联网是全球范围内的网络…

十二、磁盘的调度算法

1.先来先服务(FCFS) 思想 优点 缺点 按访问请求到达的先后顺序进行处理 公平; 如果请求访问的磁道比较集中的话&#xff0c;算法性能还算过的去 如果有大量进程竞争使用磁盘&#xff0c;请求访问的磁道很分散&#xff0c;则FCFS在性能上很差&#xff0c;寻道时间长。 2.最…

STM32新建工程-基于库函数

一、创建一个新工程 我这里选择STM32F103C8的型号&#xff0c;然后点击OK。 keil5里面的小助手&#xff0c;暂时不用&#xff0c;叉掉 二、为工程添加文件和路径 在工程模板中还需要添加启动文件、系统头文件、系统时钟文件&#xff0c;创建一个文件夹start&#xff0c;将下面…

wenyan:markdown 一键转换文章排版

介绍 今天给大家介绍一个markdown排版成自媒体文章的工具。 markdown 的重要性和便捷性不用再多说&#xff0c;但是从markdown 转换到文章排版&#xff0c;我换了很多个也都很不满意&#xff0c;尤其在不支持markdown的平台&#xff0c;更是一言难尽。 本次介绍的wenyan的核心…

C++语言学习(1): std::endl 在做什么?

std::endl 是一个函数&#xff08;而不是变量&#xff09;&#xff1a; std::endl 会向控制台写入 \n 字符&#xff0c;并且刷新缓冲。 刷新缓冲肯定比不刷新缓冲慢。 这就是为什么有些 guide 里提到&#xff0c;少用 std::endl, 多用 \n.

HarmonyOS NEXT:实现电影列表功能展示界面

时至今日HarmonyOS NEXT早已发布运行了&#xff0c;等其正式推出并大规模商用后&#xff0c;HarmonyOS的历史使命就完成并将退出历史舞台&#xff0c;为用户提供丰富的应用选择。但是Harmony NEXT是在HarmonyOS基础上剔除安卓&#xff08;AOSP&#xff09;后的产品&#xff0c;…

C++进阶(3): 二叉搜索树

二叉搜索树的概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一颗空树&#xff0c;或者具有以下性质的二叉树&#xff1a; 若它的左子树不为空&#xff0c;则左子树上所有的节点的值都小于等于 根节点的值若它的右子树不为空&#xff0c;则右子树上所有的节点的值都大于等…

嘉立创编辑器中删除自己画的封装

快速创建一个元件及封装可参考 需要删除封装的原因 在添加新的元件时&#xff0c;有时候明明关联了封装和符号&#xff0c;但在原理图中添加元件时会出现封装未添加的问题。可能是这个立创EDA中有些功能问题很少使用&#xff0c;所以没完善。而且发现在封装中可以关联器件&am…

【开源鸿蒙】OpenHarmony 5.0.0 发布了,速来下载最新代码

【开源鸿蒙】OpenHarmony 5.0.0 发布了&#xff0c;速来下载最新代码 一、写在前面二、准备命令工具三、配置用户信息四、下载OpenHarmony源码4.1 使用ssh协议下载&#xff08;推荐&#xff09;4.2 使用https协议下载 五、下载编译工具链六、参考链接 今天是9月30号&#xff0c…

ThreadLocal原理解析及面试

基本使用 讲原理之前&#xff0c;我简单写个demo小程序 public class TestThreadLocal {public static void main(String[] args) throws InterruptedException {ThreadLocal<String> tl new ThreadLocal();/**主线程设置了一个值*/tl.set("SSSSSs");//tl.…

阿里云域名注册购买和备案

文章目录 1、阿里云首页搜索 域名注册2、点击 控制台3、域名控制台 1、阿里云首页搜索 域名注册 2、点击 控制台 3、域名控制台

linux如何与网络时间对齐(雪花算法ID重复)

文章目录 前言一、可能引发什么问题&#xff1f;二、调整步骤1.查看当前系统时间2.修改为中国时区3.同步网络时间4. 雪花id重复 总结 前言 linux服务器是部署服务的不二之选,有个小问题不可忽略&#xff1a; 会发现默认的服务器时间并非中国时区,时间也是相差八小时,中国时区…

8640 希尔(shell)排序

### 思路 希尔排序是一种基于插入排序的排序算法&#xff0c;通过将待排序数组分割成多个子序列分别进行插入排序来提高效率。初始增量d为n/2&#xff0c;之后每次减半&#xff0c;直到d为1。 ### 伪代码 1. 读取输入的待排序关键字个数n。 2. 读取n个待排序关键字并存储在数组…

Git傻傻分不清楚(上)

环境&#xff1a;Idea2022.3.3、Git&#xff08;忘辽~&#xff09; 怎么上传自己的项目到Github上&#xff1f; Idea和Github进行账号关联将项目上传到本地仓库&#xff08;Commit&#xff09;将本地仓库中的项目上传到Github上&#xff08;Push&#xff09; 一、关联账号 …

【Java SE 题库】移除元素(暴力解法)--力扣

&#x1f525;博客主页&#x1f525;&#xff1a;【 坊钰_CSDN博客 】 欢迎各位点赞&#x1f44d;评论✍收藏⭐ 目录 1. 题目 2. 解法(快慢“指针”) 3. 源码 4. 小结 1. 题目 给你一个数组 nums 和一个值 val&#xff0c;你需要原地移除所有数值等于 val 的元素。元素的顺…

YOLOv10改进,YOLOv10改进主干网络为GhostNetV2(华为的轻量化架构)

摘要 摘要:轻量级卷积神经网络(CNN)专为移动设备上的应用而设计,具有更快的推理速度。卷积操作只能在窗口区域内捕捉局部信息,这限制了性能的进一步提升。将自注意力引入卷积可以很好地捕捉全局信息,但会极大地拖累实际速度。本文提出了一种硬件友好的注意力机制(称为 D…

PHP安装后Apache无法运行的问题

问题 按照网上教程php安装点击跳转教程&#xff0c;然后修改Apache的httpd.conf文件&#xff0c;本来可以运行的Apache&#xff0c;无法运行了 然后在"C:\httpd-2.4.62-240904-win64-VS17\Apache24\logs\error.log"&#xff08;就是我下载Apache的目录下的logs中&am…

多线程——认识线程(Thread)

目录 前言 一、第一个多线程程序 1.程序编写 2.介绍jconsole 二、创建线程 1.继承Thread类 ①重写run方法 ②重写run方法&#xff0c;使用匿名内部类 2.实现Runnable接口 ①重写run方法 ②重写run方法&#xff0c;使用匿名内部类 ③使用 lambda 表达式 三、多线程…

解决MySQL报Incorrect datetime value错误

目录 一、前言二、问题分析三、解决方法 一、前言 欢迎大家来到权权的博客~欢迎大家对我的博客进行指导&#xff0c;有什么不对的地方&#xff0c;我会及时改进哦~ 博客主页链接点这里–>&#xff1a;权权的博客主页链接 二、问题分析 这个错误通常出现在尝试将一个不…

OpenCV学堂 | YOLOv8官方团队宣布YOLOv11 发布了

本文来源公众号“OpenCV学堂”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;YOLOv8官方团队宣布YOLOv11 发布了 引言 YOLO11是Ultralytics YOLO系列实时目标检测器的最新迭代版本&#xff0c;它以尖端的准确性、速度和效率重新…