我試圖匯出我的 lwjgl 游戲的 .jar 檔案,以便我可以使用 gradle 將其發送給我的朋友。當我通過鍵入 java -jar [檔案名] 在 /build/libs 中打開 jar 時,會出現此錯誤訊息:
[LWJGL] Failed to load a library. Possible solutions:
a) Add the directory that contains the shared library to -Djava.library.path or -Dorg.lwjgl.librarypath.
b) Add the JAR that contains the shared library to the classpath.
[LWJGL] Enable debug mode with -Dorg.lwjgl.util.Debug=true for better diagnostics.
[LWJGL] Enable the SharedLibraryLoader debug mode with -Dorg.lwjgl.util.DebugLoader=true for better diagnostics.
Exception in thread "main" java.lang.UnsatisfiedLinkError: Failed to locate library: liblwjgl.so
at org.lwjgl.system.Library.loadSystem(Library.java:164)
at org.lwjgl.system.Library.loadSystem(Library.java:63)
at org.lwjgl.system.Library.<clinit>(Library.java:51)
at org.lwjgl.system.MemoryUtil.<clinit>(MemoryUtil.java:100)
at org.lwjgl.system.Pointer$Default.<clinit>(Pointer.java:67)
at org.lwjgl.system.Callback.<clinit>(Callback.java:40)
at org.example.app.Engine.init(Engine.kt:64)
at org.example.app.Engine.run(Engine.kt:53)
at org.example.app.ApplicationKt.main(Application.kt:4)
at org.example.app.ApplicationKt.main(Application.kt)
我知道這有點說明我需要做什么,但我真的不明白我應該在哪里添加例如“-Djava.library.path”。
這是我的 build.gradle
plugins {
id 'org.jetbrains.kotlin.jvm' version '1.5.30'
}
group 'org.example'
version '1.0-SNAPSHOT'
project.ext.lwjglVersion = "3.3.0"
project.ext.lwjglNatives = "natives-linux"
repositories {
mavenCentral()
}
dependencies {
implementation platform("org.lwjgl:lwjgl-bom:$lwjglVersion")
implementation 'org.joml:joml:1.10.3'
implementation "org.lwjgl:lwjgl"
implementation "org.lwjgl:lwjgl-assimp"
implementation "org.lwjgl:lwjgl-glfw"
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-openal::$lwjglNatives"
runtimeOnly "org.lwjgl:lwjgl-opengl::$lwjglNatives"
runtimeOnly "org.lwjgl:lwjgl-stb::$lwjglNatives"
}
jar {
duplicatesStrategy(DuplicatesStrategy.EXCLUDE)
manifest {
attributes 'Main-Class': 'org.example.app.ApplicationKt'
} from { configurations.compileClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
}
sourceSets {
main {
resources {
srcDir 'src/../lib'
}
}
}
gradle.properties:
kotlin.code.style=official
org.gradle.jvmargs=-Dkotlin.daemon.jvm.options=--illegal-access=permit
它在 IntelliJ 中運行良好,僅在嘗試在 IDE 之外打開時才會出錯。
如果重要的話,我正在使用 linux (POP_OS) 并且我正在用 kotlin 撰寫這個游戲。
uj5u.com熱心網友回復:
您目前沒有將 LWJGL 的運行時原生 jar 檔案包含到您的 fat jar 檔案中。
因此,您不需要添加任何 JVM 引數,-Djava.library.path或者-Dorg.lwjgl.librarypath只需要確保在運行 jar 時“natives-linux”依賴項/jar 檔案位于類路徑中。
在您的情況下實作此目的的一種方法是不僅遍歷編譯時依賴項,而且遍歷 jar 任務中的運行時依賴項,以收集這些并將它們添加到您構建的 fat jar 檔案中,因為您肯定會需要它們在運行時。
所以,改變這一行:
} from { configurations.compileClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
到:
} from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
然后,LWJGL 3 本身將在運行時掃描類路徑并檢測 jar 檔案中的共享庫檔案,然后適當地提取和加載它們。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/408794.html
標籤:
