【问题标题】:Why do I recieve error 'java.lang.UnsatisfiedLinkError: Can't load library' when the file can be found?为什么可以找到文件时收到错误“java.lang.UnsatisfiedLinkError:无法加载库”?
【发布时间】:2022-07-12 13:11:55
【问题描述】:

为什么我会收到这个错误,即使文件显然在那里并且可以读取?

我的项目正在使用 lwjgl 和 imgui-java。我已将 -Dimgui.library.path="libs"(相关的 .dylib 存储在其中)添加到我的 VM 选项中,应用程序应该打开,显示演示 IMGUI。

我还在下面发布了我的 build.gradle 文件:

plugins {
    id 'java'
}

group 'org.tpsgames'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
    flatDir {
        dirs 'libs'
    }
}

dependencies {
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2'
}

import org.gradle.internal.os.OperatingSystem

project.ext.lwjglVersion = "3.3.1"
project.ext.jomlVersion = "1.10.4"
project.ext.imguiVersion = '1.86.4'
project.ext.lwjglNatives = "natives-macos"

switch (OperatingSystem.current()) {
    case OperatingSystem.MAC_OS:
        project.ext.lwjglNatives = System.getProperty("os.arch").startsWith("aarch64") ? "natives-macos-arm64" : "natives-macos"
        break
}

repositories {
    mavenCentral()
}

dependencies {
    implementation platform("org.lwjgl:lwjgl-bom:$lwjglVersion")
    implementation "io.github.spair:imgui-java-app:1.86.4"
    implementation platform("org.lwjgl:lwjgl-bom:$lwjglVersion")
    implementation fileTree('libs') {include '*.jar'}
    ['', '-opengl', '-glfw'].each {
        implementation "org.lwjgl:lwjgl$it:$lwjglVersion"
        implementation "org.lwjgl:lwjgl$it::natives-macos"
    }
    implementation "io.github.spair:imgui-java-binding:1.86.4"
    implementation "io.github.spair:imgui-java-lwjgl3:1.86.4"
    implementation "io.github.spair:imgui-java-natives-macos:1.86.4"
    implementation "org.lwjgl:lwjgl"
    implementation "org.lwjgl:lwjgl-assimp"
    implementation "org.lwjgl:lwjgl-glfw"
    implementation "org.lwjgl:lwjgl-nfd"
    implementation "org.lwjgl:lwjgl-openal"
    implementation "org.lwjgl:lwjgl-opengl"
    implementation "org.lwjgl:lwjgl-stb"
    runtimeOnly "org.lwjgl:lwjgl::$lwjglNatives"
    runtimeOnly "org.lwjgl:lwjgl-assimp::$lwjglNatives"
    runtimeOnly "org.lwjgl:lwjgl-glfw::$lwjglNatives"
    runtimeOnly "org.lwjgl:lwjgl-nfd::$lwjglNatives"
    runtimeOnly "org.lwjgl:lwjgl-openal::$lwjglNatives"
    runtimeOnly "org.lwjgl:lwjgl-opengl::$lwjglNatives"
    runtimeOnly "org.lwjgl:lwjgl-stb::$lwjglNatives"
    implementation "org.joml:joml:1.10.4"
}

test {
    useJUnitPlatform()
}

【问题讨论】:

标签: java intellij-idea lwjgl imgui


【解决方案1】:

您的计算机很可能有一个采用 ARM 架构的 CPU,例如 M1 芯片,而不是 x86 架构。

因此,JVM 进程无法加载 imgui-java64.dylib 共享库,因为 imgui-java 目前只提供 x86 CPU 架构的共享库,而不是 ARM 的。

请参阅此 GitHub 问题:https://github.com/SpaiR/imgui-java/issues/123 还有这个(当前打开的)GitHub 拉取请求:https://github.com/SpaiR/imgui-java/pull/112 添加对 imgui-java 的 ARM CPU 支持。

您唯一的解决方案可能是合并当前已在该 GitHub 拉取请求中完成的工作,并为您的 ARM CPU 在本地编译 imgui-java,或者等到 PR 合并并且 imgui-java 的版本随 macOS ARM 一起发布共享库。

【讨论】:

    【解决方案2】:

    我在 libwapiti.dylib 的 lib 目录中遇到同样的错误。由于我使用的是带有 M1 芯片的 Apple Macbook,所以我也假设这个错误的原因相同,对吧??

    【讨论】:

      猜你喜欢
      • 2020-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-17
      相关资源
      最近更新 更多