来源:微信公众号「编程学习基地」
文章目录
- go调用so库
- 生成so库
- 调用so库
go调用so库
生成so库
load_so.h
#ifndef _LOAD_SO_H
#define _LOAD_SO_H
int do_test_so_func(int a,int b);
#endif
load_so.c
#include "load_so.h"
int do_test_so_func(int a,int b)
{
return a + b;
}
生成so文件
gcc -fPIC -shared -o libload_so.so load_so.c
调用so库
创建go项目cgoTest
mkdir cgoTest
创建main.go
touch main.go
内容如下
package main
/*
#cgo CFLAGS: -I ./include
#cgo LDFLAGS: -L /home/dengzr/cgoTest/lib -lload_so
#include "include/load_so.h"
*/
import "C"
import (
"fmt"
)
func main() {
val := C.do_test_so_func(1,1)
fmt.Printf("num1: %v\n", val)
}
将so库及头文件导入cgoTest目录结构如下
├── include
│ ├── load_so.c
│ └── load_so.h
├── lib
│ └── libload_so.so
└── main.go
初始化go项目环境
[root@zs3-2 cgoTest]# go mod init cgoTest
编译go程序
[root@zs3-2 cgoTest]# go build cgoTest
导入so库环境变量
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/dengzr/cgoTest/lib/
运行测试用例
[root@zs3-2 cgoTest]# ./cgoTest
num1: 2