【发布时间】:2016-03-01 09:42:46
【问题描述】:
我想在构建时在 cgo 中定义一个字符串变量。以下方法均无效。
-
#cgo CFLAGS: -DLOG="common"'common' 未声明(在此函数中首次使用)
-
#cgo CFLAGS: -DLOG=common'common' 未声明(在此函数中首次使用)
-
#cgo CFLAGS: -DLOG=\"common\"#cgo 参数格式错误:-DLOG="common"
【问题讨论】:
我想在构建时在 cgo 中定义一个字符串变量。以下方法均无效。
#cgo CFLAGS: -DLOG="common"
'common' 未声明(在此函数中首次使用)
#cgo CFLAGS: -DLOG=common
'common' 未声明(在此函数中首次使用)
#cgo CFLAGS: -DLOG=\"common\"
#cgo 参数格式错误:-DLOG="common"
【问题讨论】:
这似乎是不可能的,因为 cgo 会进行一些修改/解析——你能不能只使用一个普通的 #define LOG "common"(即不使用 CGO 特殊标志)。
或者失败你可以像这样调用go run/go build:CGO_CFLAGS='-DLOG="common"' go run so.go
【讨论】:
你可以在 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
【讨论】: