我希望在构建时在cgo中定义一个字符串变量。以下方法都不起作用。
#cgo CFLAGS: -DLOG="common"
'公共'未申报(首次使用此功能)
#cgo CFLAGS: -DLOG=common
'公共'未申报(首次使用此功能)
#cgo CFLAGS: -DLOG=\"common\"
格式错误的#cgo参数:-DLOG ="普通"
答案 0 :(得分:0)
看来这是不可能的,因为cgo会进行一些修改/解析 - 你能不能正常#define LOG "common"
(即不使用CGO特殊标志)。
或者失败你可以这样调用go run
/ go build
:CGO_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