Verwenden Sie die ausführbare Datei cygwin im Git-Bash-Skript

9

Ich habe ein .shSkript, auf das ich doppelklicke, um es von git für Windows ausführen zu lassen.

Jetzt brauche ich (imagemagick) convertvon cygwin (das ich installiert habe) und rufe es mit seinem absoluten Pfad auf - /c/cygwin64/bin/convert.exe- aber ich bekomme:

Schwerwiegender Fehler - Fehlanpassung der Cygheap-Basis festgestellt. Dieses Problem ist wahrscheinlich auf die Verwendung inkompatibler Versionen der Cygwin-DLL zurückzuführen.

Es hilft nicht, den eigentlichen convertAnruf in einen Cygwin-Bash-Anruf oder sogar in einen cmd.exeAnruf zu packen . Das ist ein bisschen seltsam, weil ich manchmal ausführbare Cygwin-Dateien direkt in .cmdSkripten verwende, und das hat immer funktioniert.

Was kann ich machen? Eine Lösung, die mein Programm auf eine Datei beschränkt, wird bevorzugt.

(Ich weiß, ich könnte wahrscheinlich nur Windows-native Imagemagick installieren. Aber am nächsten Tag brauche ich ein anderes Cygwin-Tool in einem Git-for-Win-Shellscript. Außerdem würde ich gerne verstehen, was hier passiert. Und ja, Ich werde wahrscheinlich Git für Windows an meinem Arbeitsplatz überflüssig machen , wenn möglich)

SomeDev
quelle
Kombinieren Sie keine verschiedenen Produkte, die auf Cygwin basieren. Verwenden Sie stattdessen Cygwin Git.
DavidPostill
Vielen Dank für Ihren Kommentar. Mir war nicht klar, dass Git für Windows auf Cygwin basiert. Ich lese ständig "MinGW" .. "MSYS" usw., was nicht so sehr nach Cygwin klingt. Aber nur aus Neugier: Welche anderen Produkte basieren auf Cygwin?
SomeDev
Und habe ich Recht, dass die UnxUtils / GnuWin32-Tools Windows-nativ sind? Stimmt es, dass Microsoft unter Windows an einer Art "Linux-ähnlicher Umgebung" arbeitet (einschließlich einer Bash und vielleicht anderer guter Dinge)?
SomeDev
"Es war mir nicht klar, dass Git für Windows auf Cygwin basiert", vermute ich basierend auf der DLL-Fehlermeldung. Können Sie überprüfen, ob Ihr Cop mehrere Copes der Cygwin-DLL enthält?
DavidPostill
In der Windows 10 Anniversary Edition wurde eine neue Funktion namens Windows Subsystem für Linux eingeführt. Es enthält Bash. Ich verwende Windows 10 nicht und weiß daher nicht, was es sonst noch enthält.
DavidPostill

Antworten:

7

Schwerwiegender Fehler - Fehlanpassung der Cygheap-Basis festgestellt.

Dieses Problem ist wahrscheinlich auf die Verwendung inkompatibler Versionen der Cygwin-DLL zurückzuführen.

Dieser Fehler wird verursacht, weil der Git for Windows-Pfad nicht mit Cywin kompatibel ist.

  • Beide verwenden /binund /usr/binaber diese werden unterschiedlichen Verzeichnissen zugeordnet (da sie unterschiedliche Mount-Tabellen verwenden).

  • Cywin erwartet, die DLL in zu finden /usr/bin/cygwin1.dll(und wird in Git für Windows nicht gefunden)

  • Wenn Sie einen Cygwin-Befehl explizit in einer Git für Windows- bashShell ausführen, kann Cygwin seine DLL nicht finden und generiert die obige Fehlermeldung.

  • Beachten Sie unten, dass die Mount-Zuordnung für /unterschiedlich ist.

Git für Windows:

DavidPostill@Hal MINGW64 ~
$ mount
C:/temp on /tmp type ntfs (binary,noacl,posix=0,usertemp)
C:/apps/Git on / type ntfs (binary,noacl,auto)
C:/apps/Git/usr/bin on /bin type ntfs (binary,noacl,auto)
C: on /c type ntfs (binary,noacl,posix=0,user,noumount,auto)
E: on /e type vfat (binary,noacl,posix=0,user,noumount,auto)
F: on /f type ntfs (binary,noacl,posix=0,user,noumount,auto)

DavidPostill@Hal MINGW64 ~
$ which cygwin1.dll
which: no cygwin1.dll in (/c/Users/DavidPostill/bin:/mingw64/bin:/usr/local/bin:/usr/bin:/bin:/mingw64/bin:/usr/bin:/c/Users/DavidPostill/bin:/c/Windows/system32:/c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0:/c/apps/WSCC/Sysinternals Suite:/c/apps/WSCC/NirSoft Utilities:/c/apps/Calibre:/cmd:/mingw64/bin:/usr/bin:/usr/bin/vendor_perl:/usr/bin/core_perl)

DavidPostill@Hal MINGW64 ~
$ /c/cygwin/bin/man
      1 [main] man (608) C:\cygwin\bin\man.exe: *** fatal error - cygheap base mismatch detected - 0x180301408/0x180304408.
This problem is probably due to using incompatible versions of the cygwin DLL.
Search for cygwin1.dll using the Windows Start->Find/Search facility
and delete all but the most recent version.  The most recent version *should*
reside in x:\cygwin\bin, where 'x' is the drive on which you have
installed the cygwin distribution.  Rebooting is also suggested if you
are unable to find another cygwin DLL.
Segmentation fault

Cygwin:

$ mount
C:/cygwin/bin on /usr/bin type ntfs (binary,auto)
C:/cygwin/lib on /usr/lib type ntfs (binary,auto)
C:/cygwin on / type ntfs (binary,auto)
C: on /c type ntfs (binary,posix=0,user,noumount,auto)
E: on /e type vfat (binary,posix=0,user,noumount,auto)
F: on /f type ntfs (binary,posix=0,user,noumount,auto)
$ which cygwin1.dll
/usr/bin/cygwin1.dll
$ /c/cygwin/bin/man
What manual page do you want?

Es gibt keine Lösung, außer nicht von Cygwin abgeleitete Dienstprogramme zu mischen und abzugleichen. Wählen Sie eine und bleiben Sie dabei.

DavidPostill
quelle
1
Danke für die Erklärung. Wie wäre es mit einer Lösung?
Jim G.
4
@ JimG. Es gibt keine, außer nicht von Cygwin abgeleitete Dienstprogramme zu mischen und abzugleichen. Wählen Sie eine und bleiben Sie dabei.
DavidPostill
1
Nicht hilfreich, da es keine Hinweise gibt, die bei einer Lösung helfen könnten. Dies tritt bei vielen Menschen auf, die nicht über das Wissen verfügen, um herauszufinden, was es verursacht hat.
Julian Knight
1
Leider bekomme ich das jetzt mit allem, was mit Git zu tun hat. Ich habe neue Versionen installiert, aber ich verwende Cygwin nicht explizit, nur Git. Ich kann nicht einmal die Git-Cmd-Zeile starten. Daher kann ich nicht herausfinden, was das Problem verursacht, und es nicht beheben. Wir arbeiten noch daran, um zu sehen, ob es hilft: github.com/desktop/desktop/issues/3096
Julian Knight
2
Über die Lösung im Github-Link behoben. Deaktivieren Sie ASLR für alle fehlerhaften ausführbaren Dateien in Windows Exploit Protection. Es funktioniert dann. Git für Windows muss nicht deinstalliert werden. Dazu wurde der Programmname (z. B. uname.exe) anstelle des vollständigen Pfads hinzugefügt.
Julian Knight
0

Ich hatte das gleiche Problem unter Windows 10. Ich habe mich gefragt, wie es möglich ist, viele Versionen von CygWin zu haben, obwohl ich nicht einmal eine cygwin.dll finden kann. GitExtensions-> Stash und Git Bash wurden mit unterschiedlichen Fehlermeldungen abgestürzt. Die Lösung ist hier: Gehen Sie zu Windows Defender -> App- und Browsersteuerung -> Exploit-Schutz. Und schalten Sie drei Optionen mit ASLR aus. Sie müssen Ihr System danach neu starten, aber es hilft wirklich!

Ilya Denisov
quelle
Dies ist ein Teil des Kommentarbereichs, beantwortet die Frage nicht.
Vishrant