Экспорт переменной при создании общего объекта с использованием cgo - PullRequest
0 голосов
/ 27 августа 2018

Я хочу собрать библиотеку .so, используя Go / Cgo с параметрами go build -buildmode=c-shared. Функции хорошо экспортируются, но я не могу экспортировать переменные. Мне нужно реализовать API, который работает, вызывая функцию void, которая устанавливает значения различных глобальных свойств. Как то так:

var (
    Gval1 int
    Gval2 string
    //GvalN
)

func f(){
    Gval1 = 1
    Gval2 = "qwerty"
}

Клиент .so lib запустит f (); и после этого он может получать переменные, обращаясь к их именам. Как я могу их экспортировать? Я пытался сделать трюк, подобный этому: golang cgo не может экспортировать переменные в режиме сборки c-shared , но успеха не было (пример возвращает всегда 0, а не 42). Как я могу экспортировать переменные (числа и строки)?

1 Ответ

0 голосов
/ 27 августа 2018

Я не думаю, что вы можете экспортировать переменные, только функции.

Документация go build гласит:

-buildmode=c-shared
    Build the listed main package, plus all packages it imports,
    into a C shared library. The only callable symbols will
    be those functions exported using a cgo //export comment.
    Requires exactly one main package to be listed

Где документы cgoговорит

Go functions can be exported for use by C code in the following way:

Я думаю, вы можете написать функцию, которая возвращает значение переменной.

...