git bash 스크립트에서 cygwin 실행 파일 사용


9

.shWindows 용 git에서 실행하도록 두 번 클릭 하는 스크립트가 있습니다.

이제 convertcygwin (내가 설치 한 ) 에서 (imagemagick)이 필요 하고 절대 경로로 호출하고 있습니다 /c/cygwin64/bin/convert.exe.

치명적인 오류-cygheap 기본 불일치가 감지되었습니다. 이 문제는 호환되지 않는 cygwin DLL 버전을 사용하기 때문일 수 있습니다.

convertcygwin bash 호출 또는 호출에서 실제 호출을 래핑하는 cmd.exe것은 도움이되지 않습니다. cygwin 실행 파일을 .cmd스크립트에서 직접 사용하기 때문에 항상 이상합니다.

어떡해? 내 프로그램을 하나의 파일로 제한하는 솔루션이 선호됩니다.

(아마도 Windows 네이티브 imagemagick을 설치할 수 있다는 것을 알고 있습니다. 그러나 다음 날에는 git-for-Win-Shellscript에 또 다른 cygwin 도구가 필요합니다. 또한 여기서 무슨 일이 일어나고 있는지 이해하고 싶습니다. 가능하면 직장에서 Windows 용 git을 쓸모 없게 만들 것입니다. )


Cygwin을 기반으로 다른 제품을 혼합하여 사용하지 마십시오. 대신 Cygwin git을 사용하십시오.
DavidPostill

귀하의 의견에 감사드립니다. Windows 용 git이 cygwin을 기반으로한다는 것은 분명하지 않았습니다. cygwin처럼 들리지 않는 "MinGW".. "MSYS"등을 계속 읽습니다. 그러나 호기심을 위해서 : cygwin을 기반으로 한 다른 제품은 무엇입니까?
SomeDev

그리고 나는 UnxUtils / GnuWin32 도구가 Windows 네이티브라는 것이 맞습니까? Microsoft가 Windows에서 일종의 "리눅스와 유사한 환경"(bash 및 기타 훌륭한 것들 포함)을 작업하고 있다는 것이 사실입니까?
SomeDev

"Windows 용 git이 cygwin을 기반으로한다는 것은 분명하지 않습니다"dll 오류 메시지를 기반으로 추측하고 있습니다. 시스템에 cygwin dll이 여러 개 있는지 확인할 수 있습니까?
DavidPostill

Windows 10 Anniversary Edition에는 Linux 용 Windows Subsystem이라는 새로운 기능이 도입되었습니다. bash가 포함되어 있습니다. Windows 10을 실행하고 있지 않으므로 다른 내용이 무엇인지 알 수 없습니다.
DavidPostill

답변:


7

치명적인 오류-cygheap 기본 불일치가 감지되었습니다.

이 문제는 호환되지 않는 cygwin DLL 버전을 사용하기 때문일 수 있습니다.

이 오류는 Git for Windows 경로가 Cywin과 호환되지 않기 때문에 발생합니다.

  • 그들은 모두 사용 /bin하고 /usr/bin있지만, 이러한지도를 다른 디렉토리 (서로 다른 사용하기 때문에 테이블을 마운트).

  • Cywin은 dll을 찾을 것으로 예상하고 /usr/bin/cygwin1.dllWindows 용 Git에는 없습니다.

  • Git for Windows 쉘 에서 Cygwin 명령 을 명시 적으로 실행 하면 Cygwin이 bash해당 DLL을 찾을 수없고 위의 오류 메시지를 생성합니다.

  • 아래의 마운트 매핑 /이 다릅니다.

Windows 용 Git :

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

사이 그윈 :

$ 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
설명 주셔서 감사합니다. 솔루션은 어떻습니까?
Jim G.

4
@JimG. cygwin 파생 유틸리티를 믹스 앤 매치하지 않는 것 외에는 없습니다. 하나를 고르세요.
DavidPostill

1
솔루션에 도움이되는 포인터가 없으므로 도움이되지 않습니다. 이 문제의 원인을 해결할 지식이없는 많은 사람들에게 이런 일이 발생합니다.
Julian Knight

1
불행히도, 나는 지금 이것을 git과 관련된 모든 것과 함께 얻고 있습니다. 새 버전을 설치했지만 cygwin을 명시 적으로 사용하지 않고 git 만 사용합니다. git cmd 줄을 시작할 수도 없습니다. 그래서 문제의 원인을 추적하고 해결할 수 없습니다. 아직이 도움이 있는지 확인하기 위해이를 통해 작업 : github.com/desktop/desktop/issues/3096
줄리안 나이트

2
github 링크의 솔루션을 통해 수정되었습니다. Windows 악용 방지에서 오류가있는 모든 실행 파일에 대해 ASLR을 해제하십시오. 그런 다음 작동합니다. Windows 용 git을 제거 할 필요가 없습니다. 전체 경로 대신 프로그램 이름 (예 : uname.exe)을 추가하여 수행했습니다.
Julian Knight

0

Windows 10에서 동일한 문제가 발생했습니다. CygWin 버전을 많이 보유하고있는 동안 어떻게 cygwin.dll을 찾을 수 없는지 궁금했습니다. GitExtensions-> Stash와 Git Bash가 다른 오류 메시지와 충돌했습니다. 해결책은 다음과 같습니다. Windows Defender-> 앱 및 브라우저 제어-> 취약성 공격 보호로 이동하십시오. 그리고 ASLR을 사용하여 세 가지 옵션을 끄십시오. 그 후 시스템을 다시 시작해야하지만 실제로 도움이됩니다!


이것은 의견 섹션의 일부이며 질문에 대답하지 않습니다.
Vishrant
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.