使用maven-jnaerator-plugin插件通过c++动态库的头文件生成java代码

1、c++动态库头文件 cplus.h内容如下

cpp 复制代码
#ifndef _CPLUS_H_
#define _CPLUS_H_

int sayCplus();

#endif

2、c++代码 文件cplus.cpp 内容如下

cpp 复制代码
#include<stdio.h>
extern "C"
{
int sayCplus()
{
    printf("Hello, C++\n");
    return 0;
}
}

3、通过下面命令编译成动态库文件 动态库为 mycpp

cpp 复制代码
g++ -shared -o mycpp.dll cplus.cpp

4、maven项目添加插件

XML 复制代码
          <plugin>
                <groupId>com.nativelibs4java</groupId>
                <artifactId>maven-jnaerator-plugin</artifactId>
                <version>0.12</version>
            </plugin>

5、如下图创建目录 jnaerator (src/main/jnaerator) 和文件config.jnaerator (src/main/jnaerator/config.jnaerator)

6、 config.jnaerator 文件内容如下

html 复制代码
// 生成 java 文件名称: mycpp -> MycppLibrary.java  c++动态库名称为 mycpp
-library mycpp
// 生成包名 com.pojo.util -> package com.pojo.util;
-package com.pojo.util

// 运行环境使用 jna
-runtime JNA
-D__cplusplus=1

// 忽略过期方法
-skipDeprecated
// 忽略指定方法
-skipFunctions im_.*
-skipFunctions imb_.*

// 指定头文件
C:\Users\Administrator\cplus.h

7、运行插件,生成java代码,双击

复制代码
jnaerator:generated

8、生成java代码如下

9、测试生成的代码如下

java 复制代码
public class MyCppTest {

    public static void main(String[] args) {
//        int num = MyCpp.INSTANCE.sayCplus();
//        System.out.println(num);
//        int num2 = MyCpp2.INSTANCE.sayCplus();
//        System.out.println(num2);

        int num2 = MycppLibrary.INSTANCE.sayCplus();
        System.out.println(num2);

    }
}
相关推荐
努力学编程呀(๑•ี_เ•ี๑)7 分钟前
【在 IntelliJ IDEA 中切换项目 JDK 版本】
java·开发语言·intellij-idea
坚果派·白晓明9 分钟前
在鸿蒙设备上快速验证由lycium工具快速交叉编译的C/C++三方库
c语言·c++·harmonyos·鸿蒙·编程语言·openharmony·三方库
小镇敲码人16 分钟前
深入剖析华为CANN框架下的Ops-CV仓库:从入门到实战指南
c++·python·华为·cann
码农小卡拉17 分钟前
深入解析Spring Boot文件加载顺序与加载方式
java·数据库·spring boot
向上的车轮24 分钟前
为什么.NET(C#)转 Java 开发时常常在“吐槽”Java:checked exception
java·c#·.net
Dragon Wu26 分钟前
Spring Security Oauth2.1 授权码模式实现前后端分离的方案
java·spring boot·后端·spring cloud·springboot·springcloud
跳动的梦想家h32 分钟前
环境配置 + AI 提效双管齐下
java·vue.js·spring
坚持就完事了33 分钟前
Java中的集合
java·开发语言
wjhx42 分钟前
QT中对蓝牙权限的申请,整理一下
java·数据库·qt
YCY^v^1 小时前
JeecgBoot 项目运行指南
java·学习