programing tip

Cygwin 32 비트에서 Cygwin 64 비트로 전환하는 것이 좋습니까?

itbloger 2020. 12. 12. 10:13
반응형

Cygwin 32 비트에서 Cygwin 64 비트로 전환하는 것이 좋습니까?


나는 Cygwin을 (오랫 동안) 사용하고 있습니다. 특히 개발 작업을 위해 Win7에서 gcc / g ++ 포함)을 사용합니다. 최근에 64 비트 버전 이 존재한다는 사실을 확인했습니다 .

64 비트로 전환해야하는 특별한 요구 사항은 없지만 어쨌든 그렇게 할 것인지 궁금합니다. 권장됩니까? 장단점은 무엇입니까? 전환 할 때 알려진 오버 아킹 문제가 있습니까?


옛날에 64 비트 Cygwin에는 32 비트 Cygwin에있는 많은 패키지가 누락되었지만 오늘날 에는 이러한 패키지 목록 이 매우 짧습니다. 이것이 64 비트 Windows 시스템에 새로운 32 비트 Cygwin 설치를 생성하는 마지막 중요한 이유 였기 때문에 오늘 그렇게 할 타당한 이유가 없을 것입니다.

64 비트 Cygwin 사용의 가장 큰 장점은 더 많은 양의 메모리에 액세스 할 수 있다는 것입니다. 이점이 나타나는 두 가지 매우 다른 방법이 있습니다.

  1. 많은 Cygwin 프로그램은 여러분이 줄 수있는만큼의 RAM을 사용합니다.

    예를 들어, 큰 데이터 세트와 함께 Cygwin 버전의 R사용하는 경우 R은 전체 데이터 세트를 RAM에로드하기를 원하므로 64 비트에서 32 비트 Cygwin을 사용하기 때문에 64 비트 Cygwin ASAP로 전환해야합니다. 기계는 Cygwin에서 R이 수행 할 수있는 것을 인위적으로 제한합니다.

  2. Cygwin이 fork()호출시 DLL을 처리하는 방식 은 고정 메모리 주소에로드되어야합니다.

    (이것은 rebase메커니즘 이며 일반적으로 Cygwin의 각 실행이 끝날 때 자동으로 실행됩니다 setup.exe.)

    그 결과 32 비트 Cygwin에서 rebase주소 공간이 부족한 패키지를 너무 많이 설치하여 고유 한로드 주소를 모두 제공 할 수있었습니다. 기하 급수적으로 더 큰 크기의 64 비트 주소 공간은 모든 실제 목적에서 이러한 가능성을 제거합니다.

64 비트 Cygwin은 경우에 따라 조금 더 빠를 수도 있습니다.

두 버전의 Cygwin을 동시에 설치하고 실행할 수 있습니다. 동시에 각각의 MinTTY 창을 가질 수도 있습니다. 그럼에도 불구하고 두 Cygwin은 근본적으로 호환되지 않으므로 별도의 세계로 취급하는 것이 가장 좋습니다 . 상호 운용을 시도하면 문제가 발생합니다.

이 근본적인 비 호환성은 여러 가지 방법으로 당신을 물릴 수 있습니다.

  1. 64 비트 Cygwin 프로그램이 32 비트 Cygwin 프로그램을 시작할 수 있고 그 반대의 경우도 마찬가지지만, POSIX 공유 메모리, 파일 핸들 전달 등 여러 교차 프로세스 메커니즘이 해당 경계를 넘어 작동하지 않습니다 getppid(2).

  2. 두 개의 서로 다른 Cygwin이 상호 운용되도록 만들려고하면 크로스 프로세스라고 생각하지 않는 것조차 실패합니다. /proc예를 들어 Cygwin의 내용 중 대부분은 DLL 내에서 가져 오므로 동일한 시스템에서 동시에 실행 되더라도 두 Cygwin 간에는 다릅니다.

  3. /usr/localCygwins간에 공유 하고 싶으므로 소스에서 빌드 한 모든 소프트웨어의 복사본을 두 개 가질 필요가 없습니다.

    위의 첫 번째 항목을 읽은 후 /usr/local/bin또는을 공유 할 수 없음을 알게되었습니다 /usr/local/lib.

    그것에 대해 생각한 후, /usr/local/src최소한 중복 소스 트리를 가질 필요가 없도록 공유하기로 결정했습니다 . 일반적으로 소스 트리에서 이러한 프로그램을 빌드하면 여전히 문제가 발생합니다. (예 ./configure && make && make install)

    이것은 두 가지 이유로 발생합니다.

    • 생성 된 바이너리 ( *.o, *.so, *.a, *.exe그래서하지 않는 한 ...), 두 Cygwins 사이에 호환되지 않을 make cleanCygwins 전환 할 때, 그들은 혼란을 일으키는 원인이 남아있을 것입니다.

    • 를 기억하더라도 각 Cygwin 아래 make clean의 출력 ./configure이 다를 수 있으므로 32 비트 Cygwin에서 구성된 (또는 그 반대의 경우) 64 비트 Cygwin에서 프로그램을 빌드하려는 시도가 실패 할 수 있습니다.

    이 함정에서 벗어나는 몇 가지 방법이 있습니다.

    • 공유 /usr/local/src포기하세요 .

    • make clean && ./configureCygwins를 전환 때마다 기억하십시오 .

    • 각 Cygwin 변형에 대해 별도로 트리 외부 빌드를 빌드 하십시오 .

      이는 이전 옵션보다 더 깨끗하고 빠르며 신뢰할 수 있지만 모든 소스 트리가이를 허용하도록 설정되어 있지는 않습니다.

그러한 문제를 참을만한 타당한 이유가 없다면 둘 다가 아닌 한 버전 또는 다른 버전을 설치하십시오.

작동하는 32 비트 Cygwin 설정이 있고 64 비트 Cygwin의 이점이 필요하지 않은 경우 64 비트 설치로 교체해야한다고 생각할 필요가 없습니다. 32 비트 Cygwin은 곧 사라지지 않을 것입니다.

동시에 새로운 64 비트 Windows 상자를 설정하는 경우 필요한 패키지가 포팅되지 않았 음을 미리 알지 못하면 64 비트 Cygwin을 설치했습니다. 직접 포트를 수행 할 의향이 있습니다. 안정적이고 대부분 완전합니다.


Cygwin의 공동 개발자 인 Corinna Vinschen Cygwin 1.7.25 릴리스 노트의 일부로 다음과 같이 말했습니다 .

64 비트 출시 정보

이것은 AMD64 Windows 시스템 용 64 비트 버전으로 공개적으로 사용할 수있는 네 번째 공식 Cygwin 릴리스 일 뿐이므로 여전히 새롭습니다.

현재 64 비트 Cygwin 배포판에는 32 비트 버전만큼 많은 패키지가 제공되지 않지만 32 비트 버전만큼 안정적이며 시간이 지남에 따라 더 많은 패키지를 사용할 수 있습니다.

64 비트 Windows 시스템에서 이미 32 비트 버전의 Cygwin을 실행중인 경우 계속 실행할 수 있습니다. 64 비트 Windows 시스템에 Cygwin을 새로 설치할 계획이라면 64 비트 릴리스에서 아직 사용할 수없는 특정 패키지가 필요하지 않는 한 새로운 64 비트 Cygwin 버전을 사용하는 것이 좋습니다.


64 비트로 "업그레이드"할 때의 또 다른 문제는 32 비트 설치에서 보유한 것과 동일한 패키지 목록을 자동으로 다시 설치하는 방법 인 AFAIK가 없기 때문에 힘들게 목록을 만들어야한다는 것입니다. 다시 설치하기 전의 위치로 돌아 가기 위해 새 설치에서 모든 패키지를 열심히 확인합니다.


There are some big advantages with Cygwin x64. One of them is the better memory management. I experimented a lot of address already in use, or fork: retry: Resource temporarily unavailable that forced me to run a rebaseall sometime several times a day.

With Cygwin x64 I never had any issues like this.


Install both. It doesn't take much time or disk space, and some packages aren't available for cygwin64. (Put them in different directories!)

I don't know whether sqlite3 in cygwin64 can index databases that are over about 4G in size, but I know sqlite3 in cygwin32 can't, and sqlite3 in 64-bit Linux can.

cygwin64 still doesn't have pdftk (the PDF toolkit).


Not enough reputation to comment on the selected answer, so here goes:

What about installing Cygwin64 in c:\cygwin (via setup-x86_64.exe), do a secondary Cygwin32 install in c:\cygwin32 (via setup-x86.exe), then add /cygdrive/c/cygwin32/<for_each_of_the_bin_dirs> at the end of $PATH?

This should run 64-bit apps by default, but permit calling 32-bit apps if the 64-bit version is not present.

It would be useful if setup-x86_64.exe were able to present a version-aware unified list of all Cygwin apps, and do the 32-bit install only when needed (with a popup suggesting doing a 64-bit port).

참고URL : https://stackoverflow.com/questions/18329233/is-it-advisable-to-switch-from-cygwin-32bit-to-cygwin-64bit

반응형