git bashスクリプトでcygwin実行可能ファイルを使用する


9

.shgit for Windowsで実行するためにダブルクリックするスクリプトがあります。

今、私convertはcygwin(インストールしたもの)から(imagemagick)を必要とし、それを絶対パスで呼び出しています/c/cygwin64/bin/convert.exe-しかし、次のようになります。

致命的なエラー-Cygheapベースの不一致が検出されました。この問題は、cygwin DLLの互換性のないバージョンを使用していることが原因と考えられます。

実際のconvert呼び出しをcygwin bash呼び出しで、または呼び出しでラップしても、cmd.exe役に立ちません。私は時々cygwin実行可能ファイルを.cmdスクリプトで直接使用するので、これは少し奇妙です、そしてそれは常にうまくいきました。

私に何ができる?プログラムを1つのファイルに制限するソリューションが推奨されます。

(私はおそらくWindowsネイティブのimagemagickをインストールすることができることを知っています。しかし次の日にはgit-for-Win-Shellscriptに別のcygwinツールが必要です。また、ここで何が起こっているのかを理解したいと思います。そして、はい、可能であれば、職場git for Windowsを廃止する予定です)


Cygwinベースの異なる製品を組み合わせて使用​​しないでください。代わりにCygwin gitを使用してください。
DavidPostill

ご意見ありがとうございます。git for Windowsがcygwinに基づいていることは私には明らかではありませんでした。「MinGW」..「MSYS」など、cygwinにはあまり聞こえないものを継続的に読みます。しかし、好奇心のために:cygwinをベースにした他の製品は何ですか?
SomeDev 2017

UnxUtils / GnuWin32ツールがWindowsネイティブであることは正しいですか?MicrosoftがWindowsのある種の「Linuxのような環境」(bashやその他のすばらしいものを含む)に取り組んでいるのは本当ですか?
SomeDev 2017

「git for Windowsがcygwinに基づいていることは私には明らかではありませんでした」dllエラーメッセージに基づいて推測しています。システムにcygwin dllの対応が複数あるかどうかを確認できますか?
DavidPostill

Windows 10 Anniversary Editionでは、Linux用のWindowsサブシステムと呼ばれる新機能が導入されました。bashが含まれています。私はWindows 10を実行していないので、他に何が含まれているのかわかりません。
DavidPostill

回答:


7

致命的なエラー-Cygheapベースの不一致が検出されました。

この問題は、cygwin DLLの互換性のないバージョンを使用していることが原因と考えられます。

このエラーは、Git for WindowsパスがCywinと互換性がないために発生します。

  • それらは両方を使用/binします/usr/binが、これらは異なるディレクトリにマップします(異なるマウントテーブルを使用するため)。

  • Cywinはdllを見つけることを期待しています/usr/bin/cygwin1.dll(WindowsのGitにはありません)。

  • Git for Windows シェルでCygwinコマンドを明示的に実行すると Cygwin bashはそのDLLを見つけられず、上記のエラーメッセージを生成します。

  • 以下のマウントマッピング/が異なることに注意してください。

Git for 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?

cygwinから派生したユーティリティを混ぜて一致させないこと以外に解決策はありません。1つを選んで、それに固執してください。


1
説明ありがとう。解決策はどうですか?
ジムG.

4
@JimG。cygwinから派生したユーティリティを混在させたり一致させたりする以外に、これはありません。1つを選んで、それに固執してください。
DavidPostill

1
ソリューションを支援するための指針がないため、役に立たない。これは、それを引き起こした原因を解明する知識を持っていない多くの人々に起こります。
ジュリアンナイト

1
残念ながら、私は今、gitに関連するすべてのものでこれを取得しています。新しいバージョンをインストールしましたが、明示的にcygwinを使用しておらず、gitを使用しています。git cmd行も起動できません。そのため、問題の原因を追跡して修正することはできません。引き続き問題が解決
Julian Knight

2
githubリンクのソリューションを介して修正されました。Windows Exploit Protectionのすべてのエラーのある実行可能ファイルのASLRをオフにします。その後、機能します。git for Windowsをアンインストールする必要はありません。フルパスではなくプログラム名(例:uname.exe)を追加することでそれを行いました。
ジュリアンナイト

0

私はWindows 10でも同じ問題を抱えていました。1つのcygwin.dllも見つからないのに、CygWinの多くのバージョンを作成できるのかと思っていました。GitExtensions-> StashとGit Bashは異なるエラーメッセージでクラッシュしました。解決策はここにあります:Windows Defender-> App&browser control-> Exploit protectionに移動します。ASLRで3つのオプションをオフにします。その後システムを再起動する必要がありますが、それは本当に役立ちます!


これはコメントセクションの一部であり、質問には答えません。
ビシュラント
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.