该方法适用于linux环境下的调用,Windows环境syscall包下有相关的方法直接调用
最终目录结构:
在这里插入图片描述
1、编写mylib.go

package main

import "C"

//生成动态库: go build -buildmode=c-shared -o libmylib.so mylib.go

//export Add
func Add(a, b int) int {
	return a + b
}

func main() {}

2、编写main.go

package main

// #cgo LDFLAGS: -L. -lmylib  //so文件名必须以lib开头,例如libmylib.so
// #include "libmylib.h"
import "C"

import "fmt"

func main() {
	sum := C.Add(1, 2)
	fmt.Println(sum)
}

执行生成动态库命令:

go build -buildmode=c-shared -o libmylib.so mylib.go

将动态库环境变量设置为当前工作环境(不然找到不so文件)

 export LD_LIBRARY_PATH=/home/qsj/GolandProjects/go_so

执行编译命令

go build -o main main.go 

运行

./main

输出:

3
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐