代码之家  ›  专栏  ›  技术社区  ›  Markus Lausberg

在不同的插件中分离dll和本机调用

  •  1
  • Markus Lausberg  · 技术社区  · 17 年前

    我想从关联的本地JNI类中分离一些DLL。

    插件:

    • 在插件A中,DLL被放置并且 加载插件时加载。
    • 在 插件B(取决于A)JNI 课程包括 本机方法调用中的dll。

    在运行时,由于找不到JNI类,我得到一个不满意的链接错误。 我尝试通过更新清单文件来更新类加载器逻辑:

    插件A:

    Eclipse-BuddyPolicy: registered
    

    插件B:

    Eclipse-RegisterBuddy: A
    

    但这也不起作用。 你知道解决办法吗?

    编辑:

    清单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
    
    1 回复  |  直到 17 年前
        1
  •  1
  •   Art Doler    17 年前

    我的直接建议是将插件B变成插件A的一个片段,而不是一个单独的插件,这样可以消除问题。

    也就是说,我认为您已经切换了清单;试图执行JNI调用的插件B应该 Eclipse-BuddyPolicy:registered 和插件A应该取决于并用插件B注册。

    也就是说,看完书 the buddyloading docs 我不确定BodDyLoad策略是否适用于非Java类文件。