【问题标题】:How to link and load a static library (Ed25519) in JDK8如何在JDK8中链接和加载静态库(Ed25519)
【发布时间】:2015-03-18 15:40:33
【问题描述】:

最优化的 Ed25519 (http://ed25519.cr.yp.to/) 实现包含 C 和汇编代码。由于我的程序是用 JAVA 实现的,我想为 Ed25519 生成一个共享库 (.so) 但失败了。这很可能是因为 Ed25519 汇编代码不支持 -fPIC(如果我错了,请指出)。 JDK 8似乎可以支持静态链接(Linking static library with JNI),但是我在网上找不到示例。我试图生成一个静态库(.a)并简单地将其加载为 JNI 的共享库,但显然 JAVA 不能接受它。 那么在实践中如何将静态库链接并加载到我的 JAVA 程序中?

【问题讨论】:

    标签: hyperlink static java-native-interface java-8 ed25519


    【解决方案1】:

    好的,现在我已将 ED25519 与我的 Java 程序静态集成。我相信该解决方案可以轻松应用于其他无法生成共享库的情况。

    基本上,我在 C 中实现了一个包装器,它:

    1. 调用 JNI 接口“JNI_CreateJavaVM”来启动 JVM,例如 my_jvm;
    2. 在my_jvm中,通过JNI接口'RegisterNatives'将java代码中定义的每个native方法注册到静态库中实现的对应方法中(这一步可能需要一个glue程序);
    3. 在 my_jvm 中启动 java 代码,例如,通过 JNI 接口“CallStaticVoidMethod”。

    包装器通过 GCC 与静态库(在我的例子中为 ED25519.a)链接。我的 java 程序是通过包装器启动的。

    那么,Java中的native方法就可以定位和调用C库中的方法了。

    【讨论】:

    • 您能否在线发布您的解决方案。在github什么的。我认为它可能对其他人有用
    猜你喜欢
    • 1970-01-01
    • 2014-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多