C语言调用GO
C语言调用GO
最近工作中遇到需要在c语言里面调用go语言的需求,总结了一下,下面代码里面的每一个注释都很有用,闲话不多说,直接上代码~
示例
GO代码:
package main // 这个文件一定要在main包下面 import "C" // 这个 import 也是必须的,有了这个才能生成 .h 文件 // 下面这一行不是注释,是导出为SO库的标准写法,注意 export前面不能有空格!!! //export hello func hello(value string)*C.char { // 如果函数有返回值,则要将返回值转换为C语言对应的类型 return C.CString("hello" + value) } func main(){ // 此处一定要有main函数,有main函数才能让cgo编译器去把包编译成C的库 }
注:如果go函数有多个返回值,会生成一个struct,在写c代码时要用相应的struct接收,参照生成的.h文件
生成so库go build -buildmode=c-shared -o hello.so hello.go
C代码:
#include <stdio.h> #include <string.h> #include "hello.h" // 此处为上一步生成的.h文件 int main(){ char c1[] = "did"; GoString s1 = {c1,strlen(c1)};// 构建go类型 char *c = hello(s1); printf("r:%s",c); return 0; }
编译C代码 gcc -o c_go test.c hello.so
注:这里要把之前生成的so文件已写在后面
最后执行:./c_go
相关推荐
chensen 2020-11-14
拉斯厄尔高福 2020-11-04
杜倩 2020-10-29
拉斯厄尔高福 2020-10-19
嵌入式资讯精选 2020-10-15
zhaochen00 2020-10-13
penkgao 2020-10-13
yiyilanmei 2020-10-05
wanshiyingg 2020-09-29
Mars的自语 2020-09-27
shenwenjie 2020-09-24
一个逗逗 2020-09-22
flycony 2020-09-13
zhaochen00 2020-08-20
Biao 2020-08-20
qingsongzdq 2020-08-19
penkgao 2020-08-17
cetrolchen 2020-08-14
GuoSir 2020-08-07