Go &引用;nosplit stack overflow“;什么时候建设围棋项目?

Go &引用;nosplit stack overflow“;什么时候建设围棋项目?,go,Go,我在我的代码中做了一次春季清理,将其拆分为更多的Go包,主要是为了帮助重用(每个“构建块”都在自己的包中) 修复导入错误后,我发现我的程序突然无法生成。运行“go build”返回nosplit堆栈溢出错误 robot main.init:nosplit堆栈溢出 runtime.main:nosplit堆栈溢出 有人知道这是怎么回事吗?我找不到太多的文档说明是什么原因导致了它,除了在某些情况下是这样的 一些代码被拆分到“src”文件夹中的新文件夹中,因此文件结构现在是: src/robot/ma

我在我的代码中做了一次春季清理,将其拆分为更多的Go包,主要是为了帮助重用(每个“构建块”都在自己的包中)

修复导入错误后,我发现我的程序突然无法生成。运行“go build”返回nosplit堆栈溢出错误

robot main.init:nosplit堆栈溢出 runtime.main:nosplit堆栈溢出 有人知道这是怎么回事吗?我找不到太多的文档说明是什么原因导致了它,除了在某些情况下是这样的

一些代码被拆分到“src”文件夹中的新文件夹中,因此文件结构现在是:

src/robot/main.go (main() lives here)
src/robot/(...) (application-specific packages)
src/hectormapping/(...) (stand-alone package used in "robot")

我正在Windows 7(x64)上使用Go 1.0.3。

这似乎与tip中所述的相同。可以查看相应的修复程序

总结一下我所看到的问题: 用于增长堆栈,而不是传统的固定内存区域。这样做的好处是可以产生更多线程,因为实际上只保留了所需的堆栈内存。这里的问题似乎是链接器将不意外使用拆分堆栈上内存的函数标记为“nosplit”,因为它找不到拆分堆栈序言。这会导致链接器计算错误的堆栈限制,从而使链接器认为没有空间,并向您抛出错误消息


遗憾的是,获得tip版本的唯一方法是自己编译。正如尼克·克雷格·伍德已经提到的,你可以找到说明书。如果确实无法升级,可以尝试通过在
init
函数中分配一些任意局部变量来解决此问题。但是这当然很混乱。

你试过使用go-tip而不是stable吗?@NickCraig-Wood不,在Windows中有没有简单的方法可以做到这一点?我不知道go-tip的
msi
,但是如果你有足够简单的编译器,你可以。你和Nick Craig-Wood是对的,问题在tip版本中得到了解决!安装tip版本并不是一个大问题,只是一个
hg克隆
并运行一个
.bat
文件。我确实遇到了另一个问题,但它可能与
cgo
有关,与这个问题的主题无关。感谢您的回答,也感谢您提供的其他解决方案,它们可能会派上用场!
    120     guaranteed after split check in runtime.main
    128     after runtime.main uses -8
    120     on entry to main.init
    112     on entry to robot/web.init
    104     on entry to robot/controller.init
    96      on entry to robot/slam.init
    88      on entry to robot/slam/hector.init
    80      on entry to hectormapping/map/mapimages.init
    72      on entry to hectormapping/map/maprep.init
    64      on entry to hectormapping/map/mapproccontainer.init
    56      on entry to hectormapping/scanmatcher.init
    48      on entry to hectormapping/map/gridmap/occbase.init
    40      on entry to hectormapping/map/gridmap/base.init
    32      on entry to hectormapping/map/gridmap.init
    24      on entry to github.com/skelterjohn/go%2ematrix.init
    16      on entry to math.init
    8       on entry to math.init┬À1
    0       on entry to runtime.panicindex
    -8      on entry to runtime.morestack00
src/robot/main.go (main() lives here)
src/robot/(...) (application-specific packages)
src/hectormapping/(...) (stand-alone package used in "robot")