【问题标题】:Is it possible to link a static library to Java through JNI?是否可以通过 JNI 将静态库链接到 Java?
【发布时间】:2013-03-15 13:27:29
【问题描述】:

是否可以使用 JNI 构建 HelloWorld.lib 并将其加载到 Java 应用程序?或者它只适用于共享库?

我在 JNI 文档中找不到明确的答案,没有提到“静态库”。

【问题讨论】:

标签: java java-native-interface static-libraries


【解决方案1】:

它需要是一个动态库。幸运的是,您可以从静态库构建动态库。

【讨论】:

  • 就像我想的那样......所以我想我必须使用 -fPIC 标志重新编译静态库,该死的。
  • 或者将其包装在动态/共享库中,避免重新编译。
  • 你能粘贴一个链接吗,如何从没有用fPIC编译的静态库中获取共享库?
  • 有一个具体问题未回答:stackoverflow.com/questions/13818921/…
  • 从 Java 8 开始,该库也可以与 JVM 静态链接,但我想这意味着您必须从源代码编译 JVM,以便包含以后可以加载的库使用 System.loadLibrary() 不需要 .dll / .so
【解决方案2】:

Java 8 支持静态链接的本地库 http://openjdk.java.net/jeps/178

【讨论】:

    【解决方案3】:

    要在运行时加载库,它必须是 dll(Windows)。如果你有一个静态库(lib)并且你必须通过 JNI 使用它,你必须创建一个包装 dll

    【讨论】:

      【解决方案4】:

      您必须将其链接到 JVM,而您没有办法做到这一点。这就是为什么 JNI 是使用共享库而不是静态库来定义的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多