>  기사  >  Java  >  단일 JAR 파일에 네이티브 라이브러리와 JNI 라이브러리를 어떻게 묶을 수 있나요?

단일 JAR 파일에 네이티브 라이브러리와 JNI 라이브러리를 어떻게 묶을 수 있나요?

Susan Sarandon
Susan Sarandon원래의
2024-11-12 02:02:01756검색

How Can You Bundle Native and JNI Libraries in a Single JAR File?

JAR에 네이티브 및 JNI 라이브러리 번들

최근 개발자는 네이티브 라이브러리를 포함한 여러 종속성을 단일 JAR 파일. 이 전략은 배포를 단순화하고 재배포 문제를 줄이는 것을 목표로 합니다.

네이티브 라이브러리 난제

이 노력에서 직면한 과제 중 하나는 실제 네이티브 라이브러리를 포함하는 것이었습니다. JNI 라이브러리에만 초점을 맞춘 기존 시도입니다. 또한 이전 솔루션은 특정 기본 종속성 플러그인에 맞게 조정된 것으로 보였으며 일반적인 재배포에는 적합하지 않을 수 있습니다.

포괄적인 솔루션

선호되는 접근 방식은 System.load(File) - java.library.path 시스템 속성에 의존하는 기존 System.loadLibrary(String) 대신 라이브러리를 로드합니다. 이 방법을 사용하면 사용자가 라이브러리를 수동으로 설치할 필요가 없지만 JAR이 필요한 모든 라이브러리를 캡슐화하지 않으면 플랫폼 간 이식성이 저하될 수 있습니다.

구현 프로세스

  1. 플랫폼별 위치에서 기본 JNI 라이브러리를 JAR에 통합합니다. 예: NATIVE/${os.arch}/${os.name}/libname.lib.
  2. 메인 클래스의 정적 초기화 프로그램에 코드를 구현하여 다음을 수행합니다.

    • 현재 os.arch 및 os.name.
    • 다음을 사용하여 사전 정의된 경로에서 JAR의 라이브러리를 검색합니다. Class.getResource(String).
    • 라이브러리가 있는 경우 임시 파일로 추출한 후 System.load(File)로 로드합니다.

사례 연구: jzmq

이 솔루션은 jzmq, Java에 사용되었습니다. 내장된 버전을 로드할 수 없는 경우 하이브리드 기능을 통해 java.library.path를 따라 라이브러리를 검색하도록 폴백할 수 있는 ZeroMQ용 바인딩.

위 내용은 단일 JAR 파일에 네이티브 라이브러리와 JNI 라이브러리를 어떻게 묶을 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.