使用go生成动态链接库 .so 文件,以及C的调用
一. go生成.so文件
这里写一个简单的返回输入的字符串的函数
package main
import "C"
func main() {
}
//export StrReturn
func StrReturn(str *C.char) *C.char {
return str
}
注意 :
(1)因为c的字符串和go的字符串是不同的类型,所以这里引用 import "C" 后,使用*C.chat类型
(2)要导出的函数 ,需要添加注释 "export 导出的函数名" ,注意注释需要紧挨着函数
接下来编译出.so文件,使用go build的子命令
go build -x -v -ldflags "-s -w" -buildmode=c-shared -o libstrreturn.so main.go
此命令会生成 .so文件和.h文件
二. C调用生成的.so文件
写一个简单的调用,然后打印
#include <stdio.h>
#include "libstrreturn.h"
int main()
{
char *input = "12345678";
char *output = StrReturn(input);
printf("%s\n", output);
return 0;
}
编译代码时,把.so一起编译:
gcc -o main main.c ./strreturn.so
得到main可执行文件
执行main,输出12345678
注意:
(1)编译时需要把.so文件一同编译,否则直接执行会报错
(2)在某个系统生成的.so文件,需要在同类系统下调用运行