美文网首页
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
    未实验

    相关文章

      网友评论

          本文标题:go 调用 C

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