문제

관련된 원시 JNI 클래스에서 일부 DLL을 분리하고 싶습니다.

플러그인 :

  • 플러그인 A에서 플러그인이로드 될 때 DLL이 배치되고로드됩니다.
  • 플러그인 B (A의 의존)에서 JNI 클래스는 A의 DLL에 대한 기본 메소드 호출을 포함하는 배치됩니다.

런타임에 JNI 클래스를 찾을 수 없기 때문에 불만족스러운 링크러가됩니다. 매니페스트 파일을 업데이트하여 클래스 로더 로직을 업데이트하려고합니다.

Plugin A:

Eclipse-BuddyPolicy: registered

플러그인 B :

Eclipse-RegisterBuddy: A

그러나 이것은 또한 작동하지 않습니다. 해결책을 알고 있습니까?

편집하다:

매니페스트 :

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %plugin.name
Bundle-SymbolicName: xxx ;singleton:=true
Bundle-Version: 1.0.0
Bundle-Activator: xxx.Plugin
Bundle-Vendor: xxx
Bundle-Localization: plugin
Bundle-NativeCode: native/dll/x1.dll;
 native/dll/x2.dll;
 native/dll/x3.dll;
 native/dll/x4.dll;
 native/dll/x5.dll;
 native/dll/x76.dll;
 native/dll/x.dll;
 native/dll/x7.dll;osname = win32; processor = x86
Require-Bundle: org.eclipse.core.runtime,
 org.eclipse.ui,
 org.apache.commons.logging
Bundle-ClassPath: .
Eclipse-AutoStart: true
Eclipse-LazyStart: true
Bundle-ActivationPolicy: lazy
Eclipse-BuddyPolicy: registered
Export-Package: xxx

매니페스트 B :

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %plugin.name
Bundle-SymbolicName: xxx;singleton:=true
Bundle-Version: 2.1.16
Bundle-Vendor: xxx
Bundle-Localization: plugin
Require-Bundle: org.eclipse.core.runtime,
 org.eclipse.ui,
 org.apache.commons.lang,
 org.apache.commons.logging,
 A
Export-Package: xxx
Bundle-ClassPath: .
Bundle-Activator: xxx
Eclipse-RegisterBuddy: A
Eclipse-AutoStart: true
Eclipse-LazyStart: true
Bundle-ActivationPolicy: lazy
도움이 되었습니까?

해결책

내 즉각적인 제안은 플러그인 B를 별도의 플러그인이 아닌 플러그인 A의 조각으로 바꾸는 것입니다.

즉, 나는 당신이 당신의 매니페스트를 전환했다고 생각합니다. JNI 통화를 수행하려는 플러그인 B Eclipse-BuddyPolicy:registered, 플러그인 A는 플러그인 B에 따라 등록해야합니다.

그것은 읽은 후에 Buddyloading 문서, Buddyloading 정책이 Java가 아닌 클래스 파일에 효과가 있다고 확신합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top