私は、JNIを使用していくつかのネイティブライブラリ(DLL)をロードする必要があるjavaを使用してCDバーナーで作業しています。さて、 "System.loadLibrary(libName)"を使用してネイティブライブラリをロードするには、ライブラリが "java.library.path"パスのいずれかに設定されている必要がありますが、 "System.load(libPath)"を使用する場合はそこにありますその必要はありません。ネイティブライブラリをロードするときにJVMがクラッシュする
だから、私は「は、System.load(libPath
)」を使用してすべての私のネイティブライブラリをロードするために使用し、それは以下のエラーメッセージが表示されてJVM
クラッシュの原因となる単一のもの"BurnerCaller.dll"
を除き、それらのすべてのために働きました。
# A fatal error has been detected by the Java Runtime Environment:
#
# Internal Error (0xe0434352), pid=2280, tid=0x00000000000013a8
#
# JRE version: Java(TM) SE Runtime Environment (8.0_92-b14) (build 1.8.0_92-b14)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.92-b14 mixed mode windows-amd64 compressed oops)
# Problematic frame:
# C [KERNELBASE.dll+0xaa7d]
#
# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
#
# An error report file with more information is saved as:
# C:\Program Files\Java\MainWorkspace\NewAman\hs_err_pid2280.log
#
# If you would like to submit a bug report, please visit:
# http://bugreport.java.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
Hereです。詳細なエラーです。
奇妙なことは、それが魔法のように動作し、私は(私のアプリケーションを実行するために使用されていること)現在実行中のJRE
またはJDK
の「ビン」ディレクトリにこのライブラリを置くと場合だけということです。
ご協力いただきありがとうございます。
本当にJNIコード*を含む複数のネイティブライブラリ*がありますか?通常は1つしか持っていないでしょうし、それが使った他のネイティブのものにDLL参照を持っているでしょう。 – EJP
これは唯一のユニークなライブラリで、_JNIコード_ – MDev
が含まれているため、ロードする必要がある唯一のライブラリです。 – EJP