Java使用JNI实现C文件的调用

这篇具有很好参考价值的文章主要介绍了Java使用JNI实现C文件的调用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.使用IDEA新建工程

构建最基本的maven类型就行,文件结构如下:
Java使用JNI实现C文件的调用,java,c语言,开发语言

其中最主要的类如下:

package org.linx;

public class TestJNI {
    static {
        /**
         * 加载jni库,有一个重要的点就是生成的为libnative.so,下面加载代码需要消除前缀lib和后缀so
         */
        System.loadLibrary("native");
    }

    //定义naive方法
    public native void sayHello();

    public static void main(String[] args) {
          new TestJNI().sayHello();
    }

}

main方法可有可无,只是用来测试的。

2.生成jni头文件

给IDEA做一个额外工具类:
在File-Settings–Tools–External Tools下新建。
Java使用JNI实现C文件的调用,java,c语言,开发语言

Name和Description随意,Name会在下面用到。重要的的下面三个:

1,Program内容                $JDKPath$/bin/javah
2,Arguments内容				-classpath $OutputPath$ -d ./jni $FileClass$
3,Working directory内容		$ProjectFileDir$

build java项目,在.class上点击鼠标右键—External Tools–GenerateHeader生成头文件,在jni目录就生成org_linx_TestJNI.h的头文件了。(h文件会自动拼接包名,内部方法名会自动拼接Java_包名_类名)

3.手动构建C文件

值得注意的是c文件方法名需要和h文件方法名相同
TestJNI.c文件如下:

#include <jni.h>
#include <stdio.h>
#include "org_linx_TestJNI.h"
JNIEXPORT void JNICALL Java_org_linx_TestJNI_sayHello
(JNIEnv *env, jobject obj)
{
    printf("HelloWorld JNI!/n");
    return;
}

拷贝到jni文件夹下

4.构建出so文件

gcc -shared -fPIC -o libnative.so -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux TestJNI.c -lc

此时jni文件夹将会有3个文件,.h和.c和.so

5.运行Java文件

不出意外的话应该出意外了,此时可能会出现错误

no ××× in java.library.path

此时有两种解决方法:
方法一:
java代码中输入

System.out.println(System.getProperty("java.library.path"));

此时可以找到java.library.path的路径,将刚才生成的.so文件放进来
方法二:
在IDEA启动的地方选择edit config-add vm options,添加文章来源地址https://www.toymoban.com/news/detail-553138.html

-Djava.library.path=$ProjectFileDir$/jni

到了这里,关于Java使用JNI实现C文件的调用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++通过JNI调用JAVA方法返回ArrayList对象

    运行效果:   JAVA实现: 获取系统已安装应用列表并返回ListString对象 C++ JNI实现:

    2024年02月11日
    浏览(47)
  • Android JNI复杂用法,回调,C++中调用Java方法

    Android JNI的 普通用法估计很多人都会,但是C++中调用Java方法很多人不熟悉,并且网上很多介绍都是片段的。 虽然C/C++调用Java不常用,但是掌握多一点还是有好处的。 Android JNI的基础知识介绍,之前已经有介绍,不熟悉的可以先看看: Android Jni的介绍和简单Demo实现: https://

    2024年03月26日
    浏览(48)
  • Android JNI开发从0到1,java调C,C调Java,保姆级教程详解

    前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下\\\"通俗易懂,风趣幽默\\\",感觉非常有意思,忍不住分享一下给大家。 👉点击跳转到教程 第一步首先配置Android studio的NDK开发环境,首先在Android studio中下载NDK包 第二步在local.properties文件中,配置对应的NDK路径 第三

    2024年02月12日
    浏览(37)
  • PHP调用java class 类实现文件签名

    起因:对接某平台API接口,发送的文件需要做 SM3 签名,对方平台是java写的,只有java加密示例,照着java的加密算法翻译为PHP版本,在编码转换上始终有些差异。没办法,只能想办法使用他们的java方式。 Demo.java文件:

    2024年02月09日
    浏览(52)
  • 【Java实战】Feign调用文件下载服务接口实现文件下载功能

    最近需要实现Feign调用服务提供者的文件下载接口,进行文件下载功能,这里对功能的实现做一个简单的记录 通过调用服务提供者的文件下载接口,将文件传输的流数据通过 feign.Response 来接收,服务消费者再将数据转化 首先,在项目中引入Feign的依赖。你可以使用Maven进行管

    2024年02月12日
    浏览(79)
  • Java调用Elasticsearch API实现全文检索,搭配MinIO文件存储

    应用背景: 对存储在MinIO服务器的文件实现全文检索。也可以是其他服务器或本地文件,本文仅详细介绍MinIO文件的读取及转换。通过Elasticsearch的Ingest-Attachment插件抽取文件内容,支持Word、Excel、PDF、TXT等格式文件,无需手动解析文件内容。 上代码,详细解释可以阅读注释、

    2024年02月11日
    浏览(43)
  • 大数据平台开发——使用Java和Python调用Shell脚本

    大数据平台开发——使用Java和Python调用Shell脚本 在大数据平台开发中,经常会遇到需要调用Shell脚本的场景,倒不是说只能用Shell,毕竟大数据开发到头来一定是个语言无关的事情: 从Hive源码解读大数据开发为什么可以脱离SQL、Java、Scala:https://lizhiyong.blog.csdn.net/article/deta

    2023年04月09日
    浏览(48)
  • hadoop调用HDFS java api实现在HDFS上创建文件夹

    目录 一、前期准备 1、Hadoop集群已配置完毕 2、Linux系统安装jdk 3、安装并破解IntelliJ IDEA 二、通过JAVA API操纵HDFS 1.在IDEA中创建项目  2.在hdfs项目的src-main-java路径下创建一个包,然后在包下创建一个java类实现hdfs的文件操作  3.java类的代码 4.对JAVA程序传入参数后运行程序  5

    2024年02月08日
    浏览(74)
  • Android串口开发之使用JNI实现ANDROID和串口通信

    导语:Android串口通信在物联网、智能家居等领域具有广泛的应用。本文将详细介绍如何使用JNI技术实现Android设备与串口的通信,包括串口的打开、设置参数和读写数据等过程。 在开始介绍Android串口开发之前,我们需要了解以下几个概念: JNI:JNI(Java Native Interface)是一种

    2024年02月07日
    浏览(47)
  • opencv的使用(Ubuntu linux环境,AS jni,AS java)

    最近要完成一个功能,就是把四个视频合成左右上下分布的一个视频。尝试很多方法,最终使用opencv来实现该功能。(通过opencv实现的视频好像没有声音。)研究的步骤,首先在Ubuntu环境测试,该功能是否实现。然后再将生成的库文件放到AS中,使用jni的方法调用,或者将源

    2024年02月03日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包