在cgo中定义变量

时间:2016-03-01 09:42:46

标签: go cgo

我希望在构建时在cgo中定义一个字符串变量。以下方法都不起作用。

  1. #cgo CFLAGS: -DLOG="common"  
    

    '公共'未申报(首次使用此功能)

  2. #cgo CFLAGS: -DLOG=common
    

    '公共'未申报(首次使用此功能)

  3. #cgo CFLAGS: -DLOG=\"common\"
    

    格式错误的#cgo参数:-DLOG ="普通"

2 个答案:

答案 0 :(得分:0)

看来这是不可能的,因为cgo会进行一些修改/解析 - 你能不能正常#define LOG "common"(即不使用CGO特殊标志)。

或者失败你可以这样调用go run / go buildCGO_CFLAGS='-DLOG="common"' go run so.go

答案 1 :(得分:0)

您可以在cgo中定义与在c代码中定义变量相同的变量

示例:

package main

/*
int initflag=2;

int GetInitFlag(){
   return initflag;
}
*/
import "C"
import "fmt"

// CFlag get c flag
func CFlag() int {

    value := C.GetInitFlag()

    return int(value)
}

func main() {
    fmt.Println(CFlag())
}

字符串类型必须将c中的char *转换为字符串

// C string to Go string
func C.GoString(*C.char) string

https://golang.org/cmd/cgo/