Spring boot中调用C/C++(dll)

添加JNA依赖

xml 复制代码
<dependency>
	<groupId>net.java.dev.jna</groupId>
	<artifactId>jna</artifactId>
	<version>5.5.0</version>
</dependency>

准备C代码/C++代码

如下是C代码,文件名:xizi.c

c 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char* xiZishuo(const char* name) {
    const char* format = "%s 是我老公\n";
    size_t outputSize = strlen(format) + strlen(name) - 1;
    char* output = (char*)malloc((outputSize + 1) * sizeof(char)); // 加上额外的空间来存储字符串结束符 '\0'
    snprintf(output, outputSize + 1, format, name); // 加上 1 来包含字符串结束符的复制
    return output;
}

int main() {
    const char* name = "小跟班";
    char* result = xiZishuo(name);
    printf("%s", result);
    free(result); // 释放动态分配的内存
    return 0;
}

生成dll文件

bash 复制代码
gcc -c -Wall -Werror -fpic xizi.c -o xizi.o

gcc -shared xizi.o -o xizi.dll

备注:请注意生成的.o 或者.dll是32位还是64位 ,例如下面这个是32位的

如果dll是32位,那么java就也要是32位

如果dll是64位,那么java就也要是64位

如果 32位Gcc编译器,然后使用64位jdk,就会出现如下错误

java连接dll

java 复制代码
import com.sun.jna.Library;
import com.sun.jna.Native;
public interface MyDll extends Library {
	//dll的文件名
	String dllName = "xizi";
	
    MyDll INSTANCE = (MyDll) Native.load(dllName, MyDll.class);

    //c实现的方法名
    String xiZishuo(String name);
}

使用dll

相关推荐
FlightYe10 小时前
视界原理之3D视频(四):裸眼、眼镜和头显
android·linux·c++·3d·ffmpeg·音视频
蹊黎10 小时前
Linux 下用 C 语言实现进度条
linux·c语言·单片机
by2099911 小时前
C++ 智能指针的所有权与使用
开发语言·c++·经验分享
Rover Ramble11 小时前
C++ 用互斥锁实现读写锁
开发语言·c++
你怎么知道我是队长12 小时前
C++零基础入门第2周:数据类型、运算符与表达式完全指南(附20段可运行代码+避坑清单)
c++
say_fall12 小时前
【Linux系统编程】Ext 文件系统:磁盘与存储、文件与目录、现代计算机究竟如何寻找文件
linux·运维·服务器·数据库·c++
雪落漂泊12 小时前
C++算法 滑动窗口篇(下)
开发语言·c++
云创智城-yuncitys12 小时前
YunParking 4.0:JDK 17 与 Spring Boot 3.2 的停车云升级
java·开发语言·spring boot
爱聊灵光的维C12 小时前
从看见世界到重构认知:在视觉与硬件的交汇处,寻找我们这代人的北极星
c语言·物联网·计算机视觉·重构·硬件工程·射频工程
AI+程序员在路上13 小时前
RV1126B 上支持的模型及全流程应用--从CNN及语音到 LLMVLM 与跨平台选型
linux·c语言·人工智能