【问题标题】:Define variable in cgo在cgo中定义变量
【发布时间】:2016-03-01 09:42:46
【问题描述】:

我想在构建时在 cgo 中定义一个字符串变量。以下方法均无效。

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

    'common' 未声明(在此函数中首次使用)

  2. #cgo CFLAGS: -DLOG=common
    

    'common' 未声明(在此函数中首次使用)

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

    #cgo 参数格式错误:-DLOG="common"

【问题讨论】:

    标签: go cgo


    【解决方案1】:

    这似乎是不可能的,因为 cgo 会进行一些修改/解析——你能不能只使用一个普通的 #define LOG "common"(即不使用 CGO 特殊标志)。

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

    【讨论】:

      【解决方案2】:

      你可以在 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/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-26
        • 1970-01-01
        • 2020-04-17
        • 2020-06-01
        • 2021-01-05
        • 1970-01-01
        • 2011-09-27
        • 2019-11-11
        相关资源
        最近更新 更多