cgo

作者: 突击手平头哥 | 来源:发表于2021-09-25 20:56 被阅读0次

cgo

cgo是用来在Go语言中调用C语言的工具

Go语言调用C语言

简单C语言函数

package main

/*
#include <stdio.h>
void sayHello() {
    printf("%s\n", "hello world");
}
 */
import "C"

func  main() {
    C.sayHello()
}
hello world

Go语言中需要通过import "C"关键字来链接gcc编译器,在import "C"前紧挨着的注释就是相关的代码

跨文件调用

//hello.c
#include <stdio.h>

void sayHello() {
    printf("%s\n", "hello world");
}
package main

//void sayHello();
import "C"

func  main() {
    C.sayHello()
}

hello.c放在当前目录下即可,go语言在构建时会自动编译当前目录下的c文件;只需要额外添加一个函数声明即可

动态库调用

package main

//#cgo LDFLAGS: -L. -lhello
//void sayHello();
import "C"

func  main() {
    C.sayHello()
}

通过#cgo即可指定编译需要的动态库路径、头文件路径等,使用LDFLAGSCFLAGS

注意

在实际使用中可能会遭遇到非常多的问题,比如引用类型、指针等问题;不能放弃c语言的庞大遗产,但是也要尽量规避这种跨语言调用

从C语言中调用Go语言

package main
import "C"
import "fmt"

// export Go2C
func Go2C() {
    fmt.Println("hello, C")
}

func main()  {
    
}
go build -v -x -buildmode=c-shared -o libhello.so main.go

通过export注释即可导出该函数,通过-buildmode=c-shared即可编译出动态库给C语言调用;唯一需要注意的是必须要携带main函数,哪怕为空

相关文章

  • CGO使用

    参考文章: http://golang.org/cmd/cgo is the primary cgo docume...

  • CGO 初步认知和基本数据类型转换

    CGO 是什么? CGO 是 GO 语言里面的一个特性,CGO 属于 GOLANG 的高级用法,主要是通过使用 G...

  • golang win10交叉编译

    写了一个bat文件 set CGO_ENABLED=0 关闭CGO

  • CGO编程

    1)什么是CGO编程?2)CGO语法3)相关资料 一、什么是CGO编程?简单说就是GO语言代码中可以编写C代码和调...

  • cgo

    golang与C有着千丝万缕的联系,go代码中可以调用C代码由于项目需要,新使用的golang语言需要调用C语言写...

  • cgo

    三种方式 在头部嵌入c代码 头部引用.h文件,实际调用动态库,需要指定路径(当前项目使用这种形式) 直接引用文件,...

  • cgo

    cgo cgo是用来在Go语言中调用C语言的工具 Go语言调用C语言 简单C语言函数 在Go语言中需要通过impo...

  • cgo

    转载一篇CGO的文章 Go 与 C 的桥梁:cgo 入门,剖析与实践[https://zhuanlan.zhihu...

  • cgo

    https://github.com/chai2010/gopherchina2018-cgo-talk[http...

  • go 编译时,环境变量CGO_ENABLED的作用

    用法(CGO_ENABLED=1 默认值) CGO_ENABLED=1 go build -o main1 mai...

网友评论

      本文标题:cgo

      本文链接:https://www.haomeiwen.com/subject/rrqfnltx.html