Spring boot中调用C/C++(dll)
添加JNA依赖
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>5.5.0</version>
</dependency>
准备C代码/C++代码
如下是C代码,文件名:xizi.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)); // 加上额外的空间来存储字符串结束符 ''
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文件
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
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);
}