1. JNI 라이브러리 파일이든 비JNI 라이브러리 파일이든 상관없이 라이브러리 파일을 로드하는 데 모두 사용할 수 있습니다. 기본 메소드가 호출되기 전에 해당 JNI 라이브러리 파일은 이 두 메소드 중 하나를 사용하여 로드되어야 합니다.
2. System.load 매개변수는 라이브러리 파일의 절대 경로이며 임의의 경로일 수 있습니다.
예를 들어 다음과 같이 Windows 플랫폼에서 JNI 라이브러리 파일을 로드할 수 있습니다.
System.load("C://문서 및 설정//TestJNI.dll");.
3. System.loadLibrary 매개변수는 라이브러리 파일 이름이며 라이브러리 파일의 확장자를 포함하지 않습니다.
예를 들어 다음과 같이 Windows 플랫폼에서 JNI 라이브러리 파일을 로드할 수 있습니다.
System.loadLibrary("TestJNI");
여기서 TestJNI.dll은 jvm 변수 java.library.path가 가리키는 경로에 있어야 합니다.
이 변수의 값은 다음과 같이 얻을 수 있습니다.
System.getProperty("java.library.path");
기본적으로 Windows 플랫폼에서 이 값에는 다음 위치가 포함됩니다.
1) jre와 관련된 일부 디렉토리
2) 프로그램의 현재 디렉토리
3) 윈도우 디렉토리
4) 시스템 디렉터리(system32)
5) 시스템 환경 변수 경로는 디렉터리를 지정합니다.
4. 로드하려는 라이브러리 파일이 다른 동적 링크 라이브러리에 정적으로 링크되어 있는 경우(예: TestJNI.dll이 dependency.dll에 정적으로 링크되어 있음) 다음 사항에 주의해야 합니다.
1) 선택하는 경우
System.load("C://문서 및 설정// TestJNI.dll");
그런 다음 C://Documents and Settings// 아래에 dependency.dll을 넣어도 종속 dll을 찾을 수 없기 때문에 로드가 계속 실패합니다. jvm이 TestJNI.dll을 로드할 때 먼저 TestJNI.dll이 의존하는 라이브러리 파일 dependency.dll을 로드하고 dependency.dll이 java.library.path에 지정된 디렉터리에 없기 때문에 jvm은 종속성을 찾을 수 없습니다. .dll.
이 문제를 해결하는 방법에는 두 가지가 있습니다. 먼저 java.library.path 경로에 C://Documents 및 Settings//를 추가합니다. 예를 들어 시스템 경로에 추가합니다. 두 번째는 먼저 전화하는 것입니다
System.load("C://Documents and Settings// dependency.dll"); jvm이 dependency.dll을 먼저 로드하도록 한 다음 System.load("C://Documents and Settings// TestJNI.dll"을 호출합니다. );
2) 선택하는 경우
System.loadLibrary("TestJNI");
그런 다음 TestJNI.dll과 동일한 디렉터리를 포함하여 java.library.path에 포함된 모든 경로에 dependency.dll을 넣으면 됩니다.