Cygwin 32 비트에서 Cygwin 64 비트로 전환하는 것이 좋습니까?
나는 Cygwin을 (오랫 동안) 사용하고 있습니다. 특히 개발 작업을 위해 Win7에서 gcc / g ++ 포함)을 사용합니다. 최근에 64 비트 버전 이 존재한다는 사실을 확인했습니다 .
64 비트로 전환해야하는 특별한 요구 사항은 없지만 어쨌든 그렇게 할 것인지 궁금합니다. 권장됩니까? 장단점은 무엇입니까? 전환 할 때 알려진 오버 아킹 문제가 있습니까?
옛날에 64 비트 Cygwin에는 32 비트 Cygwin에있는 많은 패키지가 누락되었지만 오늘날 에는 이러한 패키지 목록 이 매우 짧습니다. 이것이 64 비트 Windows 시스템에 새로운 32 비트 Cygwin 설치를 생성하는 마지막 중요한 이유 였기 때문에 오늘 그렇게 할 타당한 이유가 없을 것입니다.
64 비트 Cygwin 사용의 가장 큰 장점은 더 많은 양의 메모리에 액세스 할 수 있다는 것입니다. 이점이 나타나는 두 가지 매우 다른 방법이 있습니다.
많은 Cygwin 프로그램은 여러분이 줄 수있는만큼의 RAM을 사용합니다.
예를 들어, 큰 데이터 세트와 함께 Cygwin 버전의 R 을 사용하는 경우 R은 전체 데이터 세트를 RAM에로드하기를 원하므로 64 비트에서 32 비트 Cygwin을 사용하기 때문에 64 비트 Cygwin ASAP로 전환해야합니다. 기계는 Cygwin에서 R이 수행 할 수있는 것을 인위적으로 제한합니다.
Cygwin이
fork()
호출시 DLL을 처리하는 방식 은 고정 메모리 주소에로드되어야합니다.(이것은
rebase
메커니즘 이며 일반적으로 Cygwin의 각 실행이 끝날 때 자동으로 실행됩니다setup.exe
.)그 결과 32 비트 Cygwin에서
rebase
주소 공간이 부족한 패키지를 너무 많이 설치하여 고유 한로드 주소를 모두 제공 할 수있었습니다. 기하 급수적으로 더 큰 크기의 64 비트 주소 공간은 모든 실제 목적에서 이러한 가능성을 제거합니다.
64 비트 Cygwin은 경우에 따라 조금 더 빠를 수도 있습니다.
두 버전의 Cygwin을 동시에 설치하고 실행할 수 있습니다. 동시에 각각의 MinTTY 창을 가질 수도 있습니다. 그럼에도 불구하고 두 Cygwin은 근본적으로 호환되지 않으므로 별도의 세계로 취급하는 것이 가장 좋습니다 . 상호 운용을 시도하면 문제가 발생합니다.
이 근본적인 비 호환성은 여러 가지 방법으로 당신을 물릴 수 있습니다.
64 비트 Cygwin 프로그램이 32 비트 Cygwin 프로그램을 시작할 수 있고 그 반대의 경우도 마찬가지지만, POSIX 공유 메모리, 파일 핸들 전달 등 여러 교차 프로세스 메커니즘이 해당 경계를 넘어 작동하지 않습니다
getppid(2)
.두 개의 서로 다른 Cygwin이 상호 운용되도록 만들려고하면 크로스 프로세스라고 생각하지 않는 것조차 실패합니다.
/proc
예를 들어 Cygwin의 내용 중 대부분은 DLL 내에서 가져 오므로 동일한 시스템에서 동시에 실행 되더라도 두 Cygwin 간에는 다릅니다./usr/local
Cygwins간에 공유 하고 싶으므로 소스에서 빌드 한 모든 소프트웨어의 복사본을 두 개 가질 필요가 없습니다.위의 첫 번째 항목을 읽은 후
/usr/local/bin
또는을 공유 할 수 없음을 알게되었습니다/usr/local/lib
.그것에 대해 생각한 후,
/usr/local/src
최소한 중복 소스 트리를 가질 필요가 없도록 공유하기로 결정했습니다 . 일반적으로 소스 트리에서 이러한 프로그램을 빌드하면 여전히 문제가 발생합니다. (예./configure && make && make install
)이것은 두 가지 이유로 발생합니다.
생성 된 바이너리 (
*.o
,*.so
,*.a
,*.exe
그래서하지 않는 한 ...), 두 Cygwins 사이에 호환되지 않을make clean
Cygwins 전환 할 때, 그들은 혼란을 일으키는 원인이 남아있을 것입니다.를 기억하더라도 각 Cygwin 아래
make clean
의 출력./configure
이 다를 수 있으므로 32 비트 Cygwin에서 구성된 (또는 그 반대의 경우) 64 비트 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).
'programing tip' 카테고리의 다른 글
파일에 안전하게 쓰는 Python 다중 처리 (0) | 2020.12.12 |
---|---|
SCRIPT438 : 개체가 속성 또는 메서드 IE를 지원하지 않습니다. (0) | 2020.12.12 |
CSS 전달 최적화 : CSS 로딩을 연기하는 방법? (0) | 2020.12.12 |
persistence.xml에서 JPA 2.1을 지정하는 방법은 무엇입니까? (0) | 2020.12.12 |
CSS 이미지 최대 너비를 원본 이미지 크기로 설정 하시겠습니까? (0) | 2020.12.12 |