欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 艺术 > 新手向-Java调用C接口

新手向-Java调用C接口

2025/6/6 15:49:01 来源:https://blog.csdn.net/weixin_48885322/article/details/142634290  浏览:    关键词:新手向-Java调用C接口

最近工作上需要用java调用C接口,在这里记录一下。

非专业人员,有不同意见欢迎评论区交流。


java调用c接口一般有两种方案,JNI和JNA,JNI性能更好,使用复杂,JNA性能一般,使用简单,这里是简单用一下,所以用了JNA。

在github上找了个maven的demo,调不通,最后没有用maven。

目录结构

MyProject/
├── libs/
│   ├── jna.jar
│   └── platform.jar
├── CaptureUtil.java
└── libkysdk-screenshot.so

下载JNA

先建一个目录libs,下载jna需要的两个jar包,下载地址

准备so库

在这里我要调用api在libkysdk-screenshot.so,所以把so库放在项目路径下。

(也可以不放,记住位置)

调用代码

import com.sun.jna.Library;
import com.sun.jna.Native;import java.io.File;public class CaptureUtil {public interface Capture extends Library {// 要调用的api的java定义int kdk_capture_screen_to_file(String filepath, String filename, String display);// 加载动态链接库Capture INSTANCE = (Capture) Native.loadLibrary("kysdk-screenshot", Capture.class);}// 静态块用于加载本地库static {// 设置JNA查找库的方式,这里可以指定库的位置或者使用默认路径String libraryPath = "/home/XXX/libkysdk-screenshot.so";File file = new File(libraryPath);if (!file.exists()) {throw new RuntimeException("Library not found: " + libraryPath);}System.load(file.getAbsolutePath());}public static void main(String[] args) {// 获取环境变量String home = System.getenv("HOME");// 显示器参数应该是字符串而不是字符指针String display = ":0";System.out.println("***************************");// 调用库函数,并且打印返回值int result = Capture.INSTANCE.kdk_capture_screen_to_file(home, "test.png", display);System.out.println(result);System.out.println("***************************");}
}

编译语句: 

javac -cp libs/jna-5.15.0.jar:libs/jna-platform-5.15.0.jar CaptureUtil.java

执行语句:

java -cp .:libs/jna-5.15.0.jar:libs/jna-platform-5.15.0.jar CaptureUtil

这样就完成了调用。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词