[JAVA] native dll 을 포함하는 프로그램 실행하기~
JAVA / 2009. 3. 15. 20:57
예전에 개발을 했었던 로컬편지함을 인수인계 하는 과정에서 자바에서 윈도우즈 레지스트리에 접근하는 라이브러리를 사용하는 부분이 있었는데 실행을 하게 되면 아래와 같은 에러가 발생하였습니다.
ERROR You have not installed the DLL named 'ICE_JNIRegistry.DLL'.
no ICE_JNIRegistry in java.library.path
Exception in thread "main" java.lang.UnsatisfiedLinkError: com.ice.jni.registry.RegistryKey.createSubKey(Ljava/lang/String;Ljava/lang/String;I)Lcom/ice/jni/registry/RegistryKey;
at com.ice.jni.registry.RegistryKey.createSubKey(Native Method)
at kr.co.vicki.example.jniregistry.JNIRegistryExample.main(JNIRegistryExample.java:13)
no ICE_JNIRegistry in java.library.path
Exception in thread "main" java.lang.UnsatisfiedLinkError: com.ice.jni.registry.RegistryKey.createSubKey(Ljava/lang/String;Ljava/lang/String;I)Lcom/ice/jni/registry/RegistryKey;
at com.ice.jni.registry.RegistryKey.createSubKey(Native Method)
at kr.co.vicki.example.jniregistry.JNIRegistryExample.main(JNIRegistryExample.java:13)
윈도우즈의 레지스트리를 수정하는 라이브러리 dll 을 클래스 패스에 넣고 실행했는데도 위와 같은 에러가 발생 한 것이였습니다. 오래전의 기억을 더듬다 보니 아래의 자바 실행 옵션을 확인할 수 있었습니다.
java -Djava.library.path=[native dll path]
저의 경우에는 native 폴더에 dll 을 넣어두었기 때문에 아래와 같이 실행하였더니 정상적으로 실행되었습니다.
java -Djava.library.path=native -jar LocalMailBox.jar
실행 옵션외에도 LD_LIBRARY_PATH 를 환경변수로 잡아주거나, 실행시 System.loadLibrary, System.load 로 동적 라이브러리를 로드할 수 있습니다.