美文网首页
go 调用 C

go 调用 C

作者: 庐州散人2017 | 来源:发表于2018-11-20 11:47 被阅读0次

方法一:go嵌入C代码
需要注意的是: import "C"和前面的注释必须紧挨着

package main

/*
int add(int a, int b)
{
       return a+b;
}
*/
import"C"
import(
    "fmt"
)

func main(){
    fmt.Println("Hello World!")
    fmt.Println(C.add(1,2))
}

方法二:直接嵌入C库函数

package main

/*
#include <stdlib.h>
*/
import "C"
import (
    "fmt"
)
func main(){
    fmt.Println("Hello World!")
    fmt.Println(C.rand())
}

方法三:linux下调用C动态库

package main

/*
#cgo CFLAGS: -I .
#cgo LDFLAGS: -L . -lAdd
#include "add.h"
*/
import "C"
import(
    "fmt"
)

func main(){
    fmt.Println("Hello World!")
    ret := int32(C.add(2,3))
    if ret != 0 {
          fmt.Println("1111")
    }else{
          fmt.Println("2222")
    }
}

注意:运行时,需要将 so 路径配置好,最简单方式:
export LD_LIBRARY_PATH=.
然后将so 放在当前目录即可运行

方法四:linux下调用C静态库

package main

/*
#cgo CFLAGS: -I .
#cgo LDFLAGS: -L . -lAdd -static
#include "add.h"
*/
import "C"
import(
    "fmt"
)

func main(){
    fmt.Println("Hello World!")
    ret := int32(C.add(2,3))
    if ret != 0 {
         fmt.Println("1111")
    }else{
         fmt.Println("2222")
     }
}

和调用动态库的唯一区别是加了一个  -static 配置, 需要 .a 文件存在

方法五: windows下调用dll
未实验

相关文章

  • C 调用 Go 函数

    我们之前已经让 Go 调用 C 函数,但有些场景下需要 C 来调用Go函数。 Go 使用 export 关键字导出...

  • cgo

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

  • Go调用C/C++

    cgo golang是类C的语言 支持调用C接口(不支持调用C++)Go调用C/C++的方式 : C : 直接调用...

  • GO调用C函数

    GO调用C函数 在很多场景下,在Go的程序中需要调用c函数或者是用c编写的库(底层驱动,算法等,不想用Go语言再去...

  • Go与c++混合编程

    利用cgo实现go调用c/c++的接口

  • go 调用 C

    方法一:go嵌入C代码需要注意的是: import "C"和前面的注释必须紧挨着 package main/*in...

  • Go 调用 C 语言

    利用 Go 和 C 语言的交互,我们可以写 go 的 c 扩展。 新建一个文件 greeter.h, 保存内容如下...

  • go语言与c语言的相互调用

    由于工作原因,需要实现go语言与c语言的相互调用。由于go语言与c语言有着千丝万缕的暧昧关系,两者之间的调用可以通...

  • cgo

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

  • 18-Go语言和C语言交叉访问

    Go语言中调用C语言函数 在Go语言开篇中我们已经知道, Go语言与C语言之间有着千丝万缕的关系, 甚至被称之为2...

网友评论

      本文标题:go 调用 C

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