2013-03-21 6 views
8

Ich habe eine Frühjahrsputz in meinem Code durch Aufteilen in mehr Go-Pakete, hauptsächlich zur Wiederverwendbarkeit (jeder "Baustein" in seinem eigenen Paket)."Nosplit Stack Overflow" beim Erstellen Go-Projekt?

Nach dem Import Fehler behoben, entdeckte ich, dass mein Programm plötzlich nicht mehr bauen. Wenn Sie "go build" ausführen, wird nosplit stack overflow Fehler zurückgegeben.

Roboter main.init: nosplit Stapelüberlauf

120  guaranteed after split check in 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 

runtime.main: nosplit Stapelüberlauf

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 

Wer weiß, worum es geht? Ich kann nicht viel Dokumentation darüber finden, was es verursachen könnte, außer dass dies in einigen Fällen a bug that supposedly is fixed ist.

des Codes Einige wurde im "src" -Ordner in einen neuen Ordner aufgeteilt, so dass die Dateistruktur ist jetzt:

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

I Go 1.0.3 unter Windows 7 (x64) verwenden.

+0

Haben Sie versucht, mit der Spitze eher als stabil? –

+0

@ NickCraig-Wood Nein, gibt es eine einfache Möglichkeit, dies in Windows zu tun? – Mikke

+1

Ich weiß nicht, eine 'msi' für Go-Tipp, aber Sie können [build from source] (http://golang.org/doc/install/source), wenn Sie einen Compiler leicht genug haben. –

Antwort

5

Dies scheint das gleiche wie beschrieben here zu sein, die in der Spitze befestigt wurde gesagt werden. Das entsprechende Update kann überprüft werden here.

das Problem zu fassen, wie ich es sehe: Split stacking dient zum Stapeln anstelle des herkömmlichen festen Speicherbereich wächst. Dies hat den Vorteil, dass mehr Threads erzeugt werden können, da nur der benötigte Stackspeicher reserviert ist. Das Problem hier scheint zu sein, dass der Linker Funktionen markiert, die Speicher auf dem Split-Stack nicht versehentlich als "nicht gespalten" verwenden, da er den Split-Stack-Prolog nicht findet. Dies führt dazu, dass der Linker ein falsches Stack-Limit berechnet, was wiederum den Linker denken lässt, dass es keinen Platz gibt, und die Fehlermeldung an Sie ausgibt.

Leider der einzige Weg, um die Spitze Version zu bekommen ist, es selbst zu kompilieren. Wie bereits von Nick Craig-Wood erwähnt, finden Sie die Anleitung here. Wenn Sie wirklich nicht upgraden können, könnten Sie versuchen, dies zu umgehen, indem Sie eine beliebige lokale Variable in Ihren init Funktionen zuweisen. Aber das ist natürlich sehr unordentlich.

+0

Du und Nick Craig-Wood haben recht, das Problem ist in der Tip-Version behoben! Die Installation der Tip-Version stellte sich nicht als großes Problem heraus, nur ein "HG-Klon" und eine ".bat" -Datei. Ich stieß auf ein anderes Problem, aber es ist wahrscheinlich im Zusammenhang mit 'cgo' und nicht mit dem Thema dieser Frage verwandt. Danke für die Antwort, und auch für die alternative Work-around, die sich als nützlich erweisen könnte! – Mikke

Verwandte Themen