go调用c

C G O CGO CGO简介

C G O CGO CGO是一个go和c互动工具,集成在go语言包中, C G O CGO CGO编程需要注意内存泄露问题,因为go语言的栈是动态变化的,c是静态的,在相互调用时会切换空间,必须弄清楚变量的是谁来负责内存分配与回收。

# 目录总览
./
|-- hello.c
|-- hello.h
`-- main.go

# hello.c和hello.h是被go调用的c语言文件
# main.go是调用者

hello.h

#ifndef _IOTDB_H
#define _IOTDB_H
#include<stdio.h>

int ToSay(char* words);

#endif

hello.c

#include "hello.h"

int ToSay(char* words)
{
        printf("%s\n",words);
}
gcc -c hello.c # 如果c程序没有问题,那么会生成hello.o

main.go

package main
// #cgo LDFLAGS: hello.o
// #include "hello.h"
// #include <stdlib.h>
import "C"
import(
	"unsafe"
)

func main(){
	Cstr := C.CString("hello world!")
	C.ToSay(Cstr)
	C.free(unsafe.Pointer(Cstr))
}

运行

go build -o hello main.go # 编译
./hello # 运行
hello world # 如果成功,就这样
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值