效果展示
搜索好多资料,笔记一下来个简单直接上代码
环境准备
gcc -v
如果提示命令没有找到,那么你的电脑里没有gcc,去安装一个,gcc官网:https://gcc.gnu.org/
如果没安装过gcc的朋友可以直接安装win-build,可以帮你快速安装官网:https://www.mingw-w64.org/downloads/#mingw-builds
编写程序
package main
import "C"
//export Sum
func Sum(a int, b int) int {
return a + b
}
//export Cut
func Cut(a int, b int) int {
return a - b
}
//export Hello
func Hello(msg string) *C.char {
return C.CString("hello : " + msg)
}
func main() {
}
注意:即使要编译成动态库,也必须要有main函数。上面的导入“C”必须存在并且必须被注释
//export Hello
。
构建动态库
Windows动态库
go build -buildmode=c-shared -o libhello.dll libhello.go
执行以下命令生成DLL动态链接库:
Linux/Unix/macOS 动态库
执行如下命令生成 SO 动态库:
go build -buildmode=c-shared -o libhello.so .\libhello.go
java中调用
引用JNA
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>4.5.2</version>
</dependency>
创建接口
- LibHello
import com.sun.jna