문제

JNI 후크를 C ++ 라이브러리에 작성하고 Java 서버 프로젝트를위한 DLL 파일을 만들었습니다. DLL 및 JAR 파일이 "C :/Server"의 동일한 폴더에 있다고 가정 해 봅시다.

다음을 사용 하여이 DLL 파일에 액세스하고 있습니다.

System.loadLibrary("someDLLFile");

C ++ 코드가 필요한 클래스에서.

내가 실행중인 문제는이 서버를 내 컴퓨터에서 실행할 때 "서버"폴더를 배치하는 위치에 관계없이 모든 것이 잘 작동합니다. 그러나 내가 테스트하기 위해 동료에게 그것을 줄 때, 그들은 계속해서 얻습니다.

java.lang.UnsatisfiedLinkError no someDLLFile in java.library.path

DLL 파일을 JAR 파일과 동일한 폴더에 라이브로 만들고 싶습니다. 누군가가 경로 변수를 구성하지 않기를 원합니다.

System.loadLibrary ()가 폴더의 위치에 관계없이 다른 컴퓨터에서는 그렇지 않은 이유는 무엇입니까?

도움이 되었습니까?

해결책

DLL (또는 dll에 따라 다르기, 즉 msvcr90.dll 또는 무언가)이 컴퓨터의 경로에 있지만 다른쪽에 있지 않기 때문에 작동합니다.

PATH ENV-VAR 또는 JAVA.LIBRARY.PATH 속성을 설정하여 파일과 함께 DIR을 포함 시키거나 Java가 기본적으로 찾은 곳에 DLL을 저장하십시오 (배포 전략 및 플랫폼에 따라 많은 옵션).

다른 팁

한 가지 옵션은 VM을 시작할 때 명령 줄에 디렉토리를 지정하는 것입니다.

java -classpath C:\server -Djava.library.path=C:\server somePackage.Main

또 다른 옵션은 사용하는 것입니다 System.load 대신에 System.loadLibrary.

URL url = Test.class.getResource("someDLLFile.dll");
String f = new File(url.getFile()).getAbsolutePath();
System.load(f);

단점은 현재 프로그램이 플랫폼 의존 디렉토리 이름, 파일 확장자 등을 다루고 있다는 것입니다.

이것이 도움이되는지 확실하지 않지만 일부 프로젝트에 다음을 포함 시켰습니다.

http://forums.sun.com/thread.jspa?threadid=707176

기본 라이브러리를로드합니다.

그런 다음 빈 디렉토리를로드합니다

    String binPath = new File(".").getAbsolutePath() 
                     + System.getProperty("file.separator") + "bin";

   addDir( binPath );

그것은 꽤 잘 작동합니다.

그러나 다시, 이것이 사실인지 확실하지 않습니다.

DLL이 시스템의 다른 DLL에 의존하는지 여부를 확인하려면 DEPONCENS.EXE를 다운로드해보십시오. 그렇다면 그러한 DLL이 존재하는지 여부에 관계없이 다른 기계를 확인하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top