使用 JNI 链接静态库

2024-04-07

Java 8 之前的 Java 版本要求本机代码位于共享库中,但我读到,在 Java 8 中可以将静态链接库与 JNI 一起使用。我搜索过示例但找不到任何示例。

如何将 JNI 库静态链接到我的 java 应用程序中?


Java SE 8规范已更改为支持静态链接,静态链接在JDK中实现。规范中简要提到了这一点系统加载库 http://docs.oracle.com/javase/8/docs/api/java/lang/System.html#loadLibrary-java.lang.String-。它引用的 JNI 规范的部分是here http://docs.oracle.com/javase/8/docs/technotes/guides/jni/spec/design.html#compiling_loading_and_linking_native_methods and here http://docs.oracle.com/javase/8/docs/technotes/guides/jni/spec/invocation.html#library_version.

静态和动态链接方法的本机方法签名和数据类型相同。不过,您可能需要修改 JDK makefile 才能使其静态链接您的库。

一个显着的区别是静态库的初始化方式。动态库的初始化是通过调用JNI_OnLoad函数并通过调用来取消初始化JNI_OnUnload。每个动态库都可以有自己的这些函数版本。如果有多个静态链接库,显然它们不可能都具有相同名称的函数。对于名为的静态库libname加载/卸载函数是JNI_OnLoad_libname and JNI_OnUnload_libname.

The JNI_OnLoad_libname函数必须返回一个值JNI_VERSION_1_8或更高。如果没有,JVM 将忽略静态库。

基本上,如果你打电话System.loadLibrary("foo"),系统寻找函数JNI_OnLoad_foo在运行的可执行映像中,如果找到,则假定该库是静态链接的,并且在运行的映像中搜索其本机方法。如果JNI_OnLoad_foo没有找到,则进行通常的动态库搜索和加载,并从找到的动态库中链接本地方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 JNI 链接静态库 的相关文章

随机推荐

  • 如何使用 ConstraintLayout 让第一个 View 缩小以适应剩余空间?

    我有以下布局 注意Z位于下方Y 但限制在底部 之间有一个很好的间隙Y and Z 由多余的垂直空间提供 这是我的desired and actual当存在时的行为多余的垂直空间 但是 当显示键盘时 我用完了多余的垂直空间 期望的行为 没有多
  • 有没有办法*防止* ReSharper 并行运行程序集的单元测试?

    我在单元测试设置中看到一个选项 并行运行最多 1 2 个程序集 但将其设置为 1 似乎仍然并行执行单个程序集的测试 有没有办法完全禁用并行执行 这是 ReSharper 6 1 您可以尝试在此处查看堆栈溢出答案如何串行运行 NUnit 测试
  • 如何编写一个以可变参数函数作为参数的 Haskell 函数

    我正在尝试创建一个函数 该函数获取可变参数函数一个论点 i e func a gt gt a gt a 我怎样才能做到这一点 我读过关于多变量函数 https stackoverflow com questions 3467279 how
  • 使用 NLTK python 对使用示例数据或 Web 服务的句子进行情感分析?

    我正在着手一个用于情感分析的 NLP 项目 我已经成功安装了Python的NLTK 看起来是一个很棒的软件 但是 我无法理解如何使用它来完成我的任务 这是我的任务 我从一长条数据开始 假设来自他们的网络服务的数百条关于英国大选主题的推文 我
  • 当鼠标悬停在其中一个链接上时,CSS 会更改两个链接

    我有以下 html div div class section ul li class home li a href home class goto home Home a li li class about li a href about
  • 方法 Illuminate\Auth\RequestGuard::attempt 不存在

    我对 laravel 和 lumen 都是新手 我正在lumen 5 6中使用oauth2 0创建登录api 我已经安装了护照并生成了令牌 下面是我的登录控制器功能 它工作正常 它返回令牌 namespace App Http Contro
  • 如何在Android Studio中导入libstreaming?

    我是一名使用 Eclipse IDE 的老开发人员 现在我切换到 Android Studio 我想使用下面的教程 直播库 http www androidhive info 2014 06 android streaming live c
  • 如何只打开一个 fancybox 窗口(而不是 onclick)

    我正在触发 fancybox 打开onclick像这样 telefonosOtrosPaises fancybox type iframe href http es solmelia com nMenus jsp telefonosOtro
  • 使用 rust-cpython 从 Rust 并行运行 Python 代码

    我正在尝试使用 Rust 加速数据管道 该管道包含一些我不想修改的 Python 代码 因此我尝试使用 Rust 按原样运行它们rust cpython https docs rs cpython 0 4 1 cpython 和多线程 然而
  • 在 MVC5 中运行更新数据库时出错

    我有一个 MVC 5 应用程序 它的 MySQL 数据库托管在 Azure 中 它运行得很好 但是今天当我尝试输入 Update Database 并运行它时 我收到以下错误消息 System Runtime Serialization S
  • 如何在 Fossil 中闭合叶子

    The Fossil SCM 中的分支文档 http www fossil scm org index html doc tip www branching wiki表示如果叶子具有闭合标签 则该叶子被视为闭合 然而 当我进入 gt fos
  • 通过 jQuery Ajax 传递 PHP 数组

    我有一个 php 数组 toField explode ids Which looks something like 24 25 26 29 我想通过 jQuery AJAX 传递这个数组 如下所示
  • 将外语从csv文件导入到Stata

    我正在使用Stata 12 我遇到了以下问题 我正在使用以下命令将一堆 csv 文件导入到 Statainsheet命令 数据集可能包括俄语 克罗地亚语 土耳其语等 我认为它们是用 UTF 8 编码的 在 csv 文件中 它们是正确的 我把
  • ProGuard 混淆、java、Google Gson 和通用集合 - 如何保留成员?

    我有一堂这样的课 public class MyClass private Queue
  • 如何使用 KIF 框架模拟位置服务

    我使用KIF框架 http github com kif framework KIF http github com kif framework KIF 用于 UI 测试 我需要模拟位置服务 问题是位置服务在 KIF 方法 beforeAl
  • 选项卡面板中的 Vbox 布局问题

    我有一个问题vbox布局所以我创建了一个简单的例子 这说明了问题 这让我vbox布局到fit屏幕的高度 On the hbox屏幕上 视图看起来符合预期 然而 当我简单地改变hbox to vbox所有文本都覆盖在左上角 所有代码都在下面给
  • 如何在 Windows 脚本宿主中使用 jQuery?

    我正在编写一些需要解析大量包含 HTML 片段的文件的代码 看起来 jQuery 对此非常有用 但是当我尝试将 jQuery 加载到 WScript 或 CScript 之类的内容中时 由于 jQuery 对窗口对象的许多引用 它会抛出错误
  • 访问 Node JS Lambda 中的 AWS SSM 参数

    我能够在 NodeJS 中本地从 AWS SSM 参数存储中检索数据 但当我将代码移至 Lambda 时却无法检索数据 我搜索过 但没有找到很多使用 NodeJS 设置 Lambda 且不使用 无服务器 框架的示例 我知道我错过了一些简单的
  • Polymer + Dart2js 不工作

    当我使用 Polymer 库创建新应用程序时 它会生成一个示例项目 该项目在 Dartium 中运行得很好 但是当我编译它时 使用pub build 它不再起作用了 我收到两个 404 错误和一个未捕获的类型错误 这是我在 Chrome 中
  • 使用 JNI 链接静态库

    Java 8 之前的 Java 版本要求本机代码位于共享库中 但我读到 在 Java 8 中可以将静态链接库与 JNI 一起使用 我搜索过示例但找不到任何示例 如何将 JNI 库静态链接到我的 java 应用程序中 Java SE 8规范已