kmp报错→Cannot find skiko-windows-x64.dll.sha256
1、前言
学习kmp(Kotlin MultiPlatform简称)过程中报了错误,这个报错在直接运行desktop的main方法才会出现,用gradle运行却不会报错,新建的kmp项目也不会出现,我学习的写了一些代码的项目才会出现。
运行main方法主要是需要运行main方法才能debug,gradle不能debug
环境
kmp版本:1.7.0
gradle版本:8.13
kotlin版本:2.1.0
操作系統:win11
ide:IntelliJ IDEA 2024.3.4.1
2、报错
Exception in thread "main" java.lang.ExceptionInInitializerErrorat androidx.compose.ui.scene.skia.WindowSkiaLayerComponent.<init>(WindowSkiaLayerComponent.desktop.kt:53)at androidx.compose.ui.scene.ComposeContainer.createSkiaLayerComponent(ComposeContainer.desktop.kt:344)at androidx.compose.ui.scene.ComposeContainer.access$createSkiaLayerComponent(ComposeContainer.desktop.kt:84)at androidx.compose.ui.scene.ComposeContainer$mediator$2.invoke(ComposeContainer.desktop.kt:141)at androidx.compose.ui.scene.ComposeContainer$mediator$2.invoke(ComposeContainer.desktop.kt:141)at androidx.compose.ui.scene.ComposeSceneMediator$skiaLayerComponent$2.invoke(ComposeSceneMediator.desktop.kt:143)at androidx.compose.ui.scene.ComposeSceneMediator$skiaLayerComponent$2.invoke(ComposeSceneMediator.desktop.kt:143)at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:83)at androidx.compose.ui.scene.ComposeSceneMediator.getSkiaLayerComponent(ComposeSceneMediator.desktop.kt:143)at androidx.compose.ui.scene.ComposeSceneMediator.<init>(ComposeSceneMediator.desktop.kt:144)at androidx.compose.ui.scene.ComposeSceneMediator.<init>(ComposeSceneMediator.desktop.kt:113)at androidx.compose.ui.scene.ComposeContainer.<init>(ComposeContainer.desktop.kt:130)at androidx.compose.ui.scene.ComposeContainer.<init>(ComposeContainer.desktop.kt:84)at androidx.compose.ui.awt.ComposeWindowPanel.<init>(ComposeWindowPanel.desktop.kt:52)at androidx.compose.ui.awt.ComposeWindow.<init>(ComposeWindow.desktop.kt:66)at androidx.compose.ui.awt.ComposeWindow.<init>(ComposeWindow.desktop.kt:64)at androidx.compose.ui.window.Window_desktopKt$Window$3$1.invoke(Window.desktop.kt:183)at androidx.compose.ui.window.Window_desktopKt$Window$3$1.invoke(Window.desktop.kt:181)at androidx.compose.ui.window.Window_desktopKt$Window$13$1.invoke(Window.desktop.kt:605)at androidx.compose.ui.window.Window_desktopKt$Window$13$1.invoke(Window.desktop.kt:604)at androidx.compose.ui.window.AwtWindow_desktopKt$AwtWindow$2$1.invoke(AwtWindow.desktop.kt:70)at androidx.compose.ui.window.AwtWindow_desktopKt$AwtWindow$2$1.invoke(AwtWindow.desktop.kt:69)at androidx.compose.runtime.DisposableEffectImpl.onRemembered(Effects.kt:82)at androidx.compose.runtime.CompositionImpl$RememberEventDispatcher.dispatchRememberObservers(Composition.kt:1364)at androidx.compose.runtime.CompositionImpl.applyChangesInLocked(Composition.kt:992)at androidx.compose.runtime.CompositionImpl.applyChanges(Composition.kt:1013)at androidx.compose.runtime.Recomposer.composeInitial$runtime(Recomposer.kt:1150)at androidx.compose.runtime.CompositionImpl.composeInitial(Composition.kt:649)at androidx.compose.runtime.CompositionImpl.setContent(Composition.kt:635)at androidx.compose.ui.window.Application_desktopKt$awaitApplication$2$1$2.invokeSuspend(Application.desktop.kt:221)at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:101)at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318)at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:781)at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:728)at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:722)at java.base/java.security.AccessController.doPrivileged(AccessController.java:400)at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87)at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:750)at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:207)at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:92)
Caused by: org.jetbrains.skiko.LibraryLoadException: Cannot find skiko-windows-x64.dll.sha256, proper native dependency missing.at org.jetbrains.skiko.Library.findAndLoad(Library.kt:103)at org.jetbrains.skiko.Library.load(Library.kt:56)at org.jetbrains.skiko.SkiaLayer.<clinit>(SkiaLayer.awt.kt:36)... 45 more
3、修复
3.1、生成skiko-windows-x64.dll
去到desktopMain的main.kt,fun main()方法左侧的绿色运行按钮,点击Run main [desktop],运行一次生成文件。
生成路径是C:\Users\用户名.skiko\一串和摘要差不多的文件夹名
例:
C:\Users\hui\.skiko\ec6bc0f7306786ecca7e44964c7c5c0e40049680f07b151b50515efdfa5bea73
有两个文件skiko-windows-x64.dll和icudtl.dat。icudtl.dat就是报错的需要的sha256文件
3.2、将文件放入程序读取目录
点击右上角的齿轮形状的设置按钮,点击Project Structure,
1、在project tab下,看下当前sdk的是什么
2、在下面的SDKs的tab,查看当前的sdk目录
确认目录后,将skiko-windows-x64.dll和icudtl.dat放入sdk的bin目录下,完成修复
例:

我这边确认目录后,将两个文件放入C:\Users\hui.jdks\jbr-21.0.6\bin,接着就可以
4、排查过程
ide点击控制台的报错行at org.jetbrains.skiko.Library.findAndLoad(Library.kt:103)接着打个断点,debug运行。
从下面截图看到,94行是关键,判断PathInJvm的文件存在不存在,是windows系统的话,判断jvmFiles目录下是否包含icudtl.dat文件是否存在,让他条件成立接着进入95行即可,所以将skiko-windows-x64.dll和icudtl.dat文件放入当前运行jdk的bin目录下即可。

相关文章:
kmp报错→Cannot find skiko-windows-x64.dll.sha256
1、前言 学习kmp(Kotlin MultiPlatform简称)过程中报了错误,这个报错在直接运行desktop的main方法才会出现,用gradle运行却不会报错,新建的kmp项目也不会出现,我学习的写了一些代码的项目才会出现。 运…...
Cocos Creator Shader入门实战(四):预处理宏定义和Chunk
引擎: 3.8.5 您好,我是鹤九日! 回顾 学习Shader,前期是让人烦躁无味的,后期可能就是各种的逻辑让人抓耳挠腮。 一成不变的内容:遵循引擎设定的规则,理解引擎要求的规范。 这里,简单…...
K8S快速部署
前置虚拟机环境正式部署BUG解决 前置虚拟机环境 每个虚拟机配置一次就好 #关闭防火墙 systemctl stop firewalld systemctl disable firewalld #关闭 selinux sed -i s/enforcing/disabled/ /etc/selinux/config # 永久 setenforce 0 # 临时 #关闭 swap swapoff -a # 临时 vi…...
汽车PKE无钥匙进入系统一键启动系统定义与原理
汽车智能钥匙(PKE无钥匙进入系统)一键启动介绍 系统定义与原理 汽车无钥匙进入系统,简称PKE(Passive Keyless Entry),该系统采用了RFID无线射频技术和车辆身份编码识别系统,率先应用小型化、小…...
使用 VLOOKUP 和条件格式在 Excel 中查找并标红匹配的串号
使用 VLOOKUP 和条件格式在 Excel 中查找并标红匹配的串号 你的步骤非常详细且清晰,能够帮助用户在 Excel 中通过 VLOOKUP 和条件格式来查找并标红匹配的串号。以下是对你提供的步骤的简要总结和补充说明: 1. 添加“是否匹配”列 在 a.xlsx 中新增一列…...
WPF程序使用AutoUpdate实现自动更新
AutoUpdate.NET使用 一、AutoUpdater.NET 简介 AutoUpdater.NET 是一个开源库,支持从各种源(如GitHub、FTP、HTTP服务器等)下载并安装更新。它提供了灵活的配置选项,允许开发者根据需求定制更新检查逻辑和用户体验。 二、安装 …...
Dify平台离线镜像部署
Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者可以快速搭建生产级的生成式 AI 应用。即使你是非技术人员,也能参与到 AI 应用的定义和数据运营过程中。 前提…...
每日Attention学习28——Strip Pooling
模块出处 [CVPR 20] [link] Strip Pooling: Rethinking Spatial Pooling for Scene Parsing 模块名称 Strip Pooling (SP) 模块结构 模块特点 本质是空间注意力的一种使用横/纵两个方向的条形池化获得一维方向上的重要程度,结合后便可以扩展至二维方向 模块代码 …...
Android Room 框架公共模块源码深度剖析(四)
一、引言 在 Android 开发中,数据持久化是一个常见的需求。Android Room 框架作为 Android Jetpack 组件的一部分,为开发者提供了一个抽象层,使得在 SQLite 数据库上进行数据操作变得更加简单和高效。Room 框架包含多个模块,其中…...
玩转python:通俗易懂掌握高级数据结构-collections模块之UserDict
引言 UserDict是Python中collections模块提供的一个强大工具,它是dict的封装类,允许用户自定义字典的行为。通过继承UserDict,开发者可以轻松扩展字典的功能,实现自定义的字典逻辑。本文将详细介绍UserDict的关键用法和特性&…...
ollama docker设置模型常驻显存
参考: https://github.com/ollama/ollama/issues/5272 https://deepseek.csdn.net/67cfd7c93b685529b708fdee.html 通过-e传入环境变量,ollama运行: docker run -d --gpusall -e OLLAMA_KEEP_ALIVE-1 -v ollama:/root/.ollama -p 11434:114…...
双3060、Ubuntu22.04、cuda12.8安装deepseek 32b-Q8
以下是针对双RTX 3060显卡(12GB显存)在Ubuntu 22.04系统部署DeepSeek-R1-32b-qwen-distill-q8模型的完整流程,结合最新技术规范与魔塔社区资源: 一、驱动与CUDA环境配置 1. 禁用开源驱动 bash sudo tee /etc/modprobe.d/blackli…...
无再暴露源站!群联AI云防护IP隐匿方案+防绕过实战
一、IP隐藏的核心原理 群联AI云防护通过三层架构实现源站IP深度隐藏: 流量入口层:用户访问域名解析至高防CNAME节点(如ai-protect.example.com)智能调度层:基于AI模型动态分配清洗节点,实时更新节点IP池回…...
Chrome 调试器第二次连接不上?
一、连接不上 当使用 chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222") 连接 Chrome 调试器时,调试一次后就连不上,可能由以下几种原因导致: 1. Chrome 实例关闭 原因:在调试…...
【深度学习|目标检测】YOLO系列anchor-based原理详解
YOLO之anchor-based 一、关于anchors的设置二、网络如何利用anchor来训练关于register_buffer训练阶段的anchor使用推理阶段的anchor使用 三、训练时的正负样本匹配静态策略:跨分支采样跨anchor采样跨grid采样 动态策略 总结起来其实就是:基于anchor-bas…...
Linux 入门:权限的认识和学习
目录 一.shell命令以及运行原理 二.Linux权限的概念 1.Linux下两种用户 cannot open directory .: Permission denied 问题 2.Linux权限管理 1).是什么 2).为什么(权限角色目标权限属性) 3).文件访问者的分类(角色) 4).文…...
搭建opensbi+kernel+rootfs及基本设备驱动开发流程
目录 一.编译qemu 运行opensbikernelrootfs 1.编译qemu-9.1.1 2.安装riscv64编译器 3. 编译opensbi 4.编译kernel 5.编译rootfs 设备驱动开发流程 1.安装 RISC-V 交叉编译工具链 2.驱动开发准备 3.编写简易中断控制器驱动(PLIC) 4.配置内核…...
QT非UI设计器生成界面的国际化
目的 UI设计器生成界面的国际化,比较容易实现些,因为有现成的函数可以调用,基本过程如下: void MainWindow::on_actLang_CN_triggered() {//中文界面qApp->removeTranslator(trans);delete trans;transnew QTranslator;trans…...
python | 输入日期,判断这一天是这一年的第几天
题目: 使用 python 编程,实现输入日期,判断这一天是这一年的第几天? 具体实现代码如下: import datetime year input(请输入年份:) month input(请输入月份:) day input(请输入天:) date…...
openai 标准化协议 Structured Outputs 具体示例教程
Structured Outputs 具体示例教程 场景:个人财务管理助手 假设我们要构建一个 AI 助手,帮助用户记录和管理个人财务支出。用户可以输入自然语言描述(如“昨天我花了50元买了午餐”),助手将提取关键信息并以结构化 JS…...
单片机开发资源分析的实战——以STM32F103C8T6为例子的单片机资源分析
目录 第一点:为什么叫STM32F103C8T6 从资源手册拿到我们的对STM32F103C8T6的资源描述 第二件事情,关心我们的GPIO引脚输出 第三件事情:去找对应外设的说明部分 前言 本文章隶属于项目: Charliechen114514/BetterATK: This is…...
Maven | 站在初学者的角度配置
目录 Maven 是什么 概述 常见错误 创建错误代码示例 正确代码示例 Maven 的下载 Maven 依赖源 Maven 环境 环境变量 CMD测试 Maven 文件配置 本地仓库 远程仓库 Maven 工程创建 IDEA配置Maven IDEA Maven插件 Maven 是什么 概述 Maven是一个项目管理和构建自…...
【css酷炫效果】纯CSS实现3D翻转卡片动画
【css酷炫效果】纯CSS实现3D翻转卡片动画 缘创作背景html结构css样式完整代码效果图 想直接拿走的老板,链接放在这里:https://download.csdn.net/download/u011561335/90490472 缘 创作随缘,不定时更新。 创作背景 刚看到csdn出活动了&am…...
Go语言进化之旅:从1.18到1.24的语法变革
Gone 是一个基于 Go 语言开发的轻量级依赖注入框架,专注于通过模块化设计和代码生成技术,帮助开发者构建可测试、易维护的应用程序架构。 推挤你使用,项目地址:https://github.com/gone-io/gone 文章目录 里程碑变革:泛…...
玩转github
me github 可以给仓库添加开发人员吗 4o 是的,GitHub允许仓库管理员为仓库添加开发人员,并设置这些开发人员的角色和权限。这里是一个简单的步骤指导,教你如何给一个 GitHub 仓库添加开发人员: 前提条件 你必须有这个仓库的权限&…...
Spring Boot 实战:轻松实现文件上传与下载功能
目录 一、引言 二、Spring Boot 文件上传基础 (一)依赖引入 (二)配置文件设置 (三)文件上传接口编写 (一)文件类型限制 (二)文件大小验证 ࿰…...
java 使用命令创建jar的常用参数整理
在Java中,创建JAR文件的命令是jar。以下是常用参数的表格展示: 参数信息含义使用场景使用示例c创建新的JAR文件用于创建一个新的JAR文件当需要打包类文件和资源文件时jar cf myapp.jar MyClass.classt列出JAR文件内容显示JAR文件中的内容列表查看JAR文件…...
用旧的手机搭建 MQTT Broker-Node_red
MQTT Broker搭建 在Android上搭建MQTT所需工具: termux 通过网盘分享的文件:termux-app_v0.118.1+github-debug_armeabi-v7a.apk 链接: https://pan.baidu.com/s/1Iii2szXAc02cKVGdP1EuzQ?pwd=fqsc 提取码: fqsc 在 Termux 中使用 MQTT(Message Queuing Telemetry Trans…...
并发编程面试题二
1、java线程常见的基本状态有哪些,这些状态分别是做什么的 (1)创建(New):new Thread(),生成线程对象。 (2)就绪(Runnable):当调用线程对象的sta…...
Spring Cloud Stream - 构建高可靠消息驱动与事件溯源架构
一、引言 在分布式系统中,传统的 REST 调用模式往往导致耦合,难以满足高并发和异步解耦的需求。消息驱动架构(EDA, Event-Driven Architecture)通过异步通信、事件溯源等模式,提高了系统的扩展性与可观测性。 作为 S…...
