该方法适用于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