2017-11-08 10 views
0

프로젝트에서 사용할 .dll을 호출하는 .jar를 받았습니다.dll을 포함하는 디렉토리를 경로로 그라데이션에 추가 하시겠습니까?

나는 컴파일하고 다음 작업을 수행 할 경우 문제없이 실행할 수 있습니다

  • 는 Path 환경 varibale에 .DLL (윈도우 10)를 포함하는 폴더를 추가합니다.
  • .jar를 내 grad 프로젝트에 종속성으로 추가하십시오.

그런 식으로 API가 제대로 작동합니다.

생성 된 jar 파일을 다른 컴퓨터로 옮길 때 jar 파일에 포함 시키더라도 dll을 찾을 수 없으므로 소프트웨어가 작동하지 않습니다.

생성 된 jar에 필요한 dll이 있다는 것을 어떻게 알릴 수 있습니까?

그들은 .jar 그들이 나에게 dll 함수를 호출하고 path 변수에 디렉토리를 추가했다고 가정합니다. 항아리를 움직이는 모든 PC에 대한 경로 구성을 변경하지 않고도이 작업을 수행 할 수있는 방법이 있습니까?

I've는 이미 여기에 게시 답변을 시도했다 (그리고 그들은 작동하지 않습니다) :

답변

1

이 문제는 단지 방법입니다 DLL을로드합니다. 보통 System.loadLibrary(<libname>)을 호출하면 네이티브 라이브러리가 라이브러리 검색 경로에 있어야합니다.

다른 곳에서로드하려면 JAR 파일에서 DLL을 추출해야합니다. 임시 디렉토리 또는 다른 곳에서 사용하고로드하기

System.load(<absolute path to the dll file>);

참고 : JAR의 클래스를 변경할 수없는 경우 JAR 코드가 실행되기 전에로드되는 두 번째 클래스에 System.load(..)에 대한 호출을 배치 할 수 있습니다. AFAIR 라이브러리는 Java에 의해 한 번만로드되므로 동일한 이름의 DLL이 이미로드 된 경우 원래 JAR의 System.loadLibrary()에 대한 호출이 무시됩니다.

+0

항아리를 만들고 다른 PC로 옮길 때 잘 작동합니다. 안드로이드 apk를 작성하는 데는 효과가 없습니다. 하지만 지금은 충분하다고 생각합니다. 안드로이드에 대한 대안을 찾으려고 노력할 것입니다. 고마워요. – Tuzane

+0

업데이트 : 방금 안드로이드 프로젝트에서 DLL을로드하려고한다는 것을 알았습니다. 물론 작동하지 않을 것입니다 (Linux 기반 안드로이드 시스템의 Windows dll 파일). 그래서 지금은 우리가 창문에 충실해야합니다 :) – Tuzane