2016-07-07 6 views
0

maven을 사용하여 jar 파일로 패키징 된 Java 라이브러리 (예 : project A)에 기본 라이브러리 (Linux 공유 라이브러리 myLib.so)를 포함하려고합니다. 항아리에 리소스로 기본 라이브러리를 추가했습니다 (항아리의 최상위 레벨).jar와 함께 제공되는 JNA 라이브러리로드하기

이제이 라이브러리를 다른 프로젝트 (project B)에서 사용하려고합니다. Java 라이브러리에서 내 Object에 대한 메소드를 호출하면 라이브러리를 찾을 수 없습니다. 내 항아리와 공유 라이브러리를 제공하거나 내가 사용할 필요가 할 수있는, 그래서

public static void initLib() { 
     MyLib lib = (myLib) Native.loadLibrary("myLib.so"),MyLib.class); 
} 

: project A 요구에서

org.projectA.MyObject.initLib(); 

MyObject 같은 프로젝트에서

BI 통화 뭔가가 libarary에 액세스 할 수 리소스를 스트림으로 가져 와서 파일 시스템에 먼저 쓰는 것과 같은 해결 방법이 있습니까?

+0

JNA는 jar 파일에서 압축을 풀고 디스크에 쓸 수있는 메소드를 제공합니다. ['Native.extractFromResourcePath()'] (http://java-native-access.github.io/jna/4.2.1/com/sun/jna/Native.html#extractFromResourcePath-java.lang.String-)를 참조하십시오. . – technomage

답변

1

JAR에서 압축을 풀어 임시 디렉토리에 먼저 써야합니다. OS는 PE/ELF 로더를 작성하지 않는 한 메모리에서 공유 라이브러리를로드 할 수 없습니다.