概述

在使用 cgo 的时候,首先要开启 cgo 的配置

CGO_ENABLED=1

使用 C 代码

然后如下所示,既可以开始简单的使用 C 代码。

package main

/*
#include <stdio.h>
void Cprint(){
    printf("hello from c \n");
}
void CprintStr(char* str){
    printf("Hello %s \n",str);
}
*/
import "C"

func main() {
    C.Cprint()
    // 不能直接传字符串,需要相应的转一下
    // 有些比较简单的,比如int类型,底层会自动转,也可以不手动转类型
    C.CprintStr(C.CString("1232456"))
}

但是在项目中,不大可能所有的 C 代码都写在头部,需要做一下拆分。

  1. 头部 hello.h 文件, 需要放到 lib 文件夹,此时 go 里需要用 cgo 需要指定头文件位置
  2. 头文件的实现放到 hello.c 文件里

main.go 代码如下所示:

package main  

/*  
#cgo CFLAGS: -I./lib  
#include "hello.h"  
*/  
import "C"  

func main() {  
   C.Cprint()  
   // 不能直接传字符串,需要相应的转一下  
   C.CprintStr(C.CString("1232456"))  
}

hello.h 代码如下所示

#include <stdio.h>  
void Cprint();  
void CprintStr(char* str);

hello.c 代码如下所示

#include "hello.h"  

void Cprint(){  
   printf("hello from c \n");  
}  
void CprintStr(char* str){  
   printf("Hello %s \n",str);  
}

代码结构如下:

lqqptco9.png

使用 C++ 代码

和使用 C 嵌入差不多,不过 C++代码不会,如果后续用到的话再学吧。

最后修改:2023 年 12 月 30 日
如果觉得我的文章对你有用,请随意赞赏