在CGO中定义变量

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


  1.   #cgo CFLAGS:-DLOG =“ common” 
    </ code> </ pre> \ n

    'common'未声明(此功能首次使用)</ p> </ li>

  2.   #cgo CFLAGS:-DLOG = common 
    </ code> </ pre>

    'common'未声明(此功能首次使用)</ p> </ li>

  3.   #cgo CFLAGS:-DLOG = \“  common \“ 
    </ code> </ pre>

    格式错误的#cgo参数:-DLOG =” common“ </ p> </ li>
    </ ol>
    </ div >

展开原文

原文

I want, at build time, to define a string variable in cgo. None of the following approaches works.

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

    'common' undeclared (first use in this function)

  2. #cgo CFLAGS: -DLOG=common
    

    'common' undeclared (first use in this function)

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

    malformed #cgo argument: -DLOG="common"

cgo

2个回答



这似乎是不可能的,因为cgo进行了一些处理/解析-您能摆脱普通的 #define吗? 日志“ common” </ code>(即不使用CGO特殊标志)。</ p>

否则,您可以调用 go run </ code> / go build </ code>像这样: CGO_CFLAGS ='-DLOG =“ common”'这样运行。go</ code> </ p>
</ div>

展开原文

原文

It appears this is not possible as cgo does some mangling/parsing -- can you get away with just a normal #define LOG "common" (i.e. not use the CGO special flags).

Or failing that You can invoke go run/go build like this: CGO_CFLAGS='-DLOG="common"' go run so.go



您可以在cgo中定义变量,与在c代码中定义变量相同,</ p>

示例: </ p>

 包main 

/ *
int initflag = 2;

int GetInitFlag(){
返回initflag ;
}

  • /
    import“ C”
    import“ fmt”

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

    value:= C.GetInitFlag()
    \ n返回int(value)
    }

func main(){
fmt.Println(CFlag())
}
</ code> </ pre>

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

  // C字符串转换为Go字符串
func C.GoString(* C.char)字符串
</ code> </ pre>

https://golang.org/ cmd / cgo / </ p>
</ div>

展开原文

原文

you could define a variable in cgo same as define it in c code,

example:

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())
}

string type must convert char* in c to string

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

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐