go 调用 C

2018-11-20  本文已影响0人  庐州散人2017

方法一: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
未实验

上一篇 下一篇

猜你喜欢

热点阅读