使用cgo构建共享库时导出变量

时间:2018-08-27 09:14:41

标签: c go cgo

我想使用带有选项go build -buildmode=c-shared的Go / Cgo构建.so库。 函数可以很好地导出,但是我不能导出变量。我需要实现一个API,该API可以通过调用void函数来工作,该函数可以设置各种全局属性的值。像这样:

var (
    Gval1 int
    Gval2 string
    //GvalN
)

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

.so lib的客户端将运行f();然后,它可以通过寻址变量名称来获取变量。如何导出它们? 我曾尝试过这样的技巧:golang cgo can't export variables by build mode c-shared,但是没有成功(示例返回的总是0,而不是42)。 如何导出变量(数字和字符串)?

1 个答案:

答案 0 :(得分:1)

我认为您不能导出变量,只能导出函数。

go build文档说:

max

cgo docs says

-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

我想您可以编写一个返回变量值的函数。