Java Web Start를 사용하여 일부 타사 네이티브 라이브러리에 종속 된 Java 응용 프로그램을 시작합니다. 그런 다음 이러한 기본 라이브러리는 LoadLibrary/dlopen을 사용하여 종속성으로 다른 기본 라이브러리 (commonLib
)를로드합니다.Java Web Start - 다른 네이티브 종속성을 사용하여 네이티브 종속성로드
Web Start를 사용하지 않는 경우 기본 라이브러리가 같은 디렉토리에있을 때 모든 것이 예상대로 작동합니다.
시작하지만, 내가 한 네이티브 라이브러리 jar 파일에 포장 및 JNLP 파일에서 참조 할 필요웹 :
<!-- Windows OS -->
<resources os="Windows">
<nativelib href="native/native-windows.jar" />
</resource>
<!-- Linux OS -->
<resources os="Linux">
<nativelib href="native/native-linux.jar" />
</resources>
<!-- Mac OSX -->
<resources os="Mac OS X">
<nativelib href="native/native-osx.jar"/>
</resources>
네이티브 라이브러리 잘로드하지만 그들은 자신의 의존성을로드에 실패를 commonLib
- 파일이 현재 라이브러리 검색 경로가 아닌 일부 jar/cache 폴더에 있기 때문에 C++ LoadLibrary/dlopen 호출이 실패합니다.
System.loadLibrary("commonLib");
System.loadLibrary("myNativeLib");
그러나이 방법은 OS X에서 작동하지 않습니다 :
는 Windows에서 나는 JNI 라이브러리를로드과 같이하기 전에 자바에 미리 로딩 commonLib
하여이 문제를 해결할 수 있었다 - 원시 코드에서 dlopen이 실패합니다. dlopen은 이미로드 된 라이브러리를 다시로드하려고 시도하지 않을 정도로 현명하지 못합니다.
Java Web Start의 다른 네이티브 라이브러리에 의존하는 네이티브 라이브러리를 압축하고로드하는 플랫폼 간 플랫폼이 있습니까?
항아리에는 관련된 모든 원주민이 포함되어 있습니까? –
예, 두 번 확인했습니다. –