2013-10-02 2 views
0

나는 C 프로젝트를 가지고있다. 라이브러리 (.so)로 컴파일하고 JNI를 사용하여 Java 프로젝트로 가져옵니다. 모든 것이 잘되고있어. 하지만 그것을 .jar 파일로 컴파일하고 싶습니다. 따라서 배포 할 수 있으며 사용자는 C 함수 (JNI 사용)를 구현하는 Java 클래스를 생성 할 필요가 없습니다. 그래서 해보려고했지만 다시 컴파일하려고하면 (클래스와 .so가 들어있는 .jar로 깨끗한 프로젝트에서) 클래스가 (.jar에서) 더 이상 .so를 찾지 못한다. 기호가 인식되지 않습니다. 사용자가 .so를 jar 파일 (Eclipse 또는 기타)에 수동으로 연결하는 것을 원하지 않습니다..so의 .so (Eclipse)

자바 또는 일식에 대한 경험이 많지 않으므로 길 잃었습니다.

나에게 도움이 될만한 사람이 있습니까?

+0

Linux 이외의 응용 프로그램에 배포하는 것이 문제가됩니다. btw, System.loadLibrary가 내부 jar 라이브러리에서 작동하지 않습니다. – RamonBoza

답변

1

대부분의 운영 체제에서 동적 링커는 압축 된 아카이브의 라이브러리를로드하지 않습니다. .so 파일을 임시 파일 용 디렉토리와 같이로드하려면 파일로 .so를 추출해야합니다.

그런 다음 System.load를 사용하여 라이브러리 검색 경로에 없으므로 .so를로드해야합니다.

이 번거로운 대안은 jnlp를 사용하여 응용 프로그램을 배포하는 것입니다. 웹 시작 응용 프로그램이 응용 프로그램을 다운로드, 설정 및 실행하므로 사용자가 직접 압축을 풀어도 걱정할 필요가 없습니다. 네이티브 라이브러리는 nativelib 요소로 추가됩니다. http://docs.oracle.com/javase/7/docs/technotes/guides/javaws/developersguide/syntax.html

관련 문제