【发布时间】:2021-05-17 10:30:18
【问题描述】:
我通过使用 CGO 在 Go 代码中使用 C 库。问题是,似乎每次调用 C 函数时都没有维护全局变量的状态。
这个库有一个全局变量和一系列初始化函数。调用初始化函数没有效果。就好像每个函数执行后分配给库的整个内存都被清除了。并且每个函数都是独立执行的。
有没有人有这方面的经验我应该设置什么?
PS:我没有在 Go 中创建对这些全局变量的引用。此全局变量是尚未导出的结构。它的定义不在库的主 .h 中。有没有办法在不更改 C 库代码的情况下保留这个全局变量? (感谢:TehSphinX)
变量是:swed in https://www.astro.com/ftp/swisseph/src/sweph.h
extern TLS struct swe_data swed;
【问题讨论】:
-
这完全不正常,但没有minimal reproducible example 就很难说更多了。
-
你是否保留了对 Go 中那些全局变量的引用? Go GC 将清理 Go 未保留引用的任何内存。这可能会有所帮助:go101.org/article/unsafe.html。多说一句,我们需要看一些代码。
标签: c go global-variables cgo stateful