Определить переменную в cgo

Я хочу во время сборки определить строковую переменную в cgo. Ни один из следующих подходов не работает.

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

    'обычный' необъявленный (первое использование в этой функции)

  2. #cgo CFLAGS: -DLOG=common
    

    'обычный' необъявленный (первое использование в этой функции)

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

    неверно сформированный аргумент #cgo: -DLOG = "common"


person user2424276    schedule 01.03.2016    source источник


Ответы (2)


Похоже, это невозможно, поскольку cgo выполняет некоторую манипуляцию / синтаксический анализ - можно ли обойтись обычным #define LOG "common" (т.е. не использовать специальные флаги CGO).

Или в противном случае Вы можете вызвать _2 _ / _ 3_ следующим образом: CGO_CFLAGS='-DLOG="common"' go run so.go

person Ash Berlin-Taylor    schedule 22.05.2016

вы можете определить переменную в 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())
}

строковый тип должен преобразовывать char * в c в строку

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

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

person pinocchio.    schedule 25.07.2019