kmp报错→Cannot find skiko-windows-x64.dll.sha256

server/2025/3/24 8:00:45/

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目录下即可。
在这里插入图片描述


http://www.ppmy.cn/server/176684.html

相关文章

人工智能的数学基础之概率论与统计学(含示例)

接前文&#xff0c;我们已经深度分析了二值逻辑、三值逻辑到多值逻辑的变迁&#xff0c;知道了这是一个逻辑体系不断拓展和深化的过程&#xff0c;反映了人们对复杂现象和不确定性问题认识的逐步深入。具体看我的文章&#xff1a;二值逻辑、三值逻辑到多值逻辑的变迁&#xff0…

RK3568笔记七十九:Web通信处理

若该文为原创文章,转载请注明原文出处。 此篇记录下使用boa如何通过web服务器后台cgi和主程序通讯。 目前所知道的方式有很多,比如: 一、使用fifo管道处理web和主应用程序直接的消息。 二、通过socket通信,cgi做为客户端,主程序为服务端。 两种方法,解决了通信问题。…

Docker 最佳实践(MySQL)

MySQL的快速安装部署 1. 安装Docker 确保你的系统已经安装了Docker。如果没有安装&#xff0c;可以参考官方文档进行安装&#xff1a; Docker 官方文档 2. 创建自定义网络 创建一个自定义的Docker网络&#xff0c;以便容器之间可以相互通信&#xff1a; docker network c…

握手问题 第十五届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组

握手问题 题目来源 第十五届蓝桥杯大赛软件赛省赛C/C 大学 B 组 原题链接 蓝桥杯 握手问题 问题描述 问题分析 算法思路分析&#xff1a; 问题描述&#xff1a; 总共有 50 人参加会议&#xff0c;每个人需要与其他 49 人握手一次。但有 7 个人彼此之间没有握手&#xff…

【第14节】windows sdk编程:进程与线程介绍

目录 一、进程与线程概述 1.1 进程查看 1.2 何为进程 1.3 进程的创建 1.4 进程创建实例 1.5 线程查看 1.6 何为线程 1.7 线程的创建 1.8 线程函数 1.9 线程实例 二、内核对象 2.1 何为内核对象 2.2 内核对象的公共特点 2.3 内核对象句柄 2.4 内核对象的跨进程访…

电脑管家如何清理内存及垃圾,提升电脑性能

电脑在长时间使用后&#xff0c;常常会变得越来越卡顿&#xff0c;打开程序的速度变慢&#xff0c;甚至响应迟缓。这时&#xff0c;不少用户会选择使用电脑管家来进行内存清理和垃圾清理。那么&#xff0c;电脑管家是如何清理内存的&#xff1f;它又是如何清理垃圾的&#xff1…

docker,centos容器开机启动程序

1、拉取个centos容器 2、这样启动&#xff0c;有systemctl权限 docker run -tid --name centos01 --privilegedtrue centos:02 /usr/sbin/init3、加环境变量&#xff0c;在/etc/profile 配置环境变量&#xff0c;&#xff08;自己安装的软件&#xff0c;入java&#xff09;&a…

Python刷题:流程控制(上)

今天刷的是PythonTip的Python 入门挑战中的题&#xff0c;整体难度不高&#xff0c;适合小白练手以及巩固知识点。下面会进行详细讲解。 每日一句 每一个拼命努力的人&#xff0c;都像是独自穿越黑暗森林的行者&#xff0c; 没有并肩的身影&#xff0c;唯有孤独如影随形&…