wake-up-neo.com

Ist es ratsam, von Cygwin 32bit auf Cygwin 64bit zu wechseln?

Ich benutze Cygwin (seit langer Zeit). Insbesondere verwende ich es (einschließlich gcc/g ++) auf Win7 für die Entwicklungsarbeit. Ich habe erst kürzlich bemerkt, dass es jetzt eine 64-Bit-Version gibt.

Ich habe kein spezielles Bedürfnis, das den Übergang zu 64-Bit erfordert, aber ich habe mich gefragt, ob ich es trotzdem tun soll. Ist es ratsam? Was sind die Vor- und Nachteile? Gibt es bekannte Probleme mit Überlichtbögen beim Übergang?

58
einpoklum

Es war einmal so, dass in 64-Bit-Cygwin viele Pakete fehlten, die in 32-Bit-Cygwin vorhanden waren, aber heute ist die Liste solcher Pakete ziemlich kurz. Da dies der letzte wichtige Grund war, neue 32-Bit-Cygwin-Installationen auf 64-Bit-Windows-Systemen zu erstellen, ist es unwahrscheinlich, dass Sie heute einen guten Grund dafür haben.

Der größte Vorteil der Verwendung von 64-Bit-Cygwin ist der Zugriff auf mehr Speicher. Es gibt zwei sehr unterschiedliche Arten, auf die sich der Vorteil auswirkt:

  1. Viele Cygwin-Programme verwenden so viel RAM, wie Sie ihnen geben können.

    Wenn Sie beispielsweise die Cygwin-Version von R mit großen Datenmengen verwenden, sollten Sie auf 64-Bit-Cygwin umsteigen, da R das laden möchte Die Verwendung von 32-Bit-Cygwin auf einem 64-Bit-Computer schränkt also künstlich ein, was R unter Cygwin erreichen kann.

  2. Die Art und Weise, wie Cygwin angesichts von fork() - Aufrufen mit DLLs umgeht, erfordert, dass sie an einer festen Speicheradresse geladen werden.

    (Dies ist der rebase -Mechanismus , der normalerweise am Ende jedes Laufs von Cygwins setup.exe Automatisch ausgeführt wird.)

    Eine Folge davon ist, dass es in 32-Bit-Cygwin möglich war, so viele Pakete zu installieren, dass rebase nicht mehr genügend Adressraum zur Verfügung stand, um ihnen alle eindeutigen Ladeadressen zuzuweisen. Die exponentiell größere Größe des 64-Bit-Adressraums eliminiert diese Möglichkeit jetzt für alle praktischen Zwecke.

64-Bit-Cygwin kann in manchen Fällen auch etwas schneller sein.

Sie können beide Versionen von Cygwin gleichzeitig installieren und ausführen. Sie können sogar gleichzeitig ein MinTTY-Fenster für jedes öffnen. Trotzdem ist es am besten, sie als getrennte Welten zu behandeln, da die beiden Cygwins grundsätzlich inkompatibel sind. Sie werden in Schwierigkeiten geraten, wenn Sie versuchen, sie zum Zusammenspiel zu bringen.

Diese grundsätzliche Inkompatibilität kann Sie auf verschiedene Weise beißen:

  1. Obwohl ein 64-Bit-Cygwin-Programm ein 32-Bit-Cygwin-Programm starten kann und umgekehrt, funktionieren mehrere prozessübergreifende Mechanismen nicht über diese Grenzen hinweg: POSIX-Shared-Memory, Dateiübergabe, getppid(2) .. .

  2. Sogar einige Dinge, die Sie nicht als prozessübergreifend betrachten, schlagen fehl, wenn Sie versuchen, zwei verschiedene Cygwins miteinander zu interagieren. Ein Großteil des Inhalts von Cygwins /proc Stammt beispielsweise aus der DLL, so dass es zwischen zwei Cygwins unterschiedlich ist, obwohl sie gleichzeitig auf demselben Computer ausgeführt werden.

  3. Angenommen, Sie möchten /usr/local Zwischen den Cygwins teilen, damit Sie nicht zwei Kopien der gesamten Software benötigen, die Sie aus dem Quellcode erstellt haben.

    Nachdem Sie den ersten Punkt oben gelesen haben, stellen Sie fest, dass Sie /usr/local/bin Oder /usr/local/lib Nicht teilen können.

    Nachdem Sie darüber nachgedacht haben, entscheiden Sie, dass Sie nur /usr/local/src Freigeben möchten, damit Sie zumindest keine doppelten Quellbäume benötigen. Sie werden weiterhin Probleme haben, wenn Sie eines dieser Programme wie üblich im Quellbaum erstellen. (d. h. ./configure && make && make install)

    Dies geschieht aus zwei Gründen:

    • Generierte Binärdateien (*.o, *.so, *.a, *.exe ...) sind zwischen den beiden Cygwins nicht kompatibel, es sei denn, Sie make clean Wenn Sie zwischen Cygwins wechseln, werden sie zurückgelassen, was zu Verwirrung führt.

    • Selbst wenn Sie sich an make clean Erinnern, ist die Ausgabe von ./configure Unter jedem Cygwin wahrscheinlich unterschiedlich. Versuchen Sie daher, ein Programm unter 64-Bit-Cygwin zu erstellen, das unter 32-Bit-Cygwin (oder umgekehrt) könnte scheitern.

    Es gibt verschiedene Wege aus dieser Falle heraus:

    • Gib auch das Teilen von /usr/local/src Auf.

    • Denken Sie daran, bei jedem Wechsel von Cygwins make clean && ./configure Zu verwenden.

    • Build Build-out-of-Tree separat für jede Cygwin-Variante.

      Dies ist sauberer, schneller und zuverlässiger als die vorherige Option, aber nicht alle Quellbäume sind so eingerichtet, dass dies möglich ist.

Wenn Sie keinen guten Grund haben, solche Probleme in Kauf zu nehmen, installieren Sie die eine oder die andere Version, nicht beide.

Wenn Sie ein funktionierendes 32-Bit-Cygwin-Setup haben und die Vorteile von 64-Bit-Cygwin nicht benötigen, müssen Sie es nicht durch eine 64-Bit-Installation ersetzen. 32-Bit-Cygwin wird nicht so schnell verschwinden.

Gleichzeitig würde ich, wenn ich eine neue 64-Bit-Windows-Box einrichten würde, 64-Bit-Cygwin darauf installieren, es sei denn, ich wusste von vornherein, dass kein Paket portiert wurde, das ich benötigte, und das war ich auch nicht bereit, den Hafen selbst zu tun. Es ist stabil und größtenteils vollständig.

89
Warren Young

Corinna Vinschen, Co-Hauptentwicklerin von Cygwin , hat im Rahmen der Cygwin 1.7.25 Release Notes Folgendes gesagt:

ÜBER DIE 64-BIT-VERÖFFENTLICHUNG

Dies ist nur die vierte offizielle Cygwin-Version, die als 64-Bit-Version für AMD64-Windows-Systeme veröffentlicht wird. Sie ist also noch ziemlich neu.

Derzeit enthält die 64-Bit-Cygwin-Distribution nicht so viele Pakete wie die 32-Bit-Version, ist jedoch so stabil wie die 32-Bit-Version und es werden im Laufe der Zeit weitere Pakete verfügbar sein.

Wenn Sie bereits eine 32-Bit-Version von Cygwin auf 64-Bit-Windows-Computern ausführen, können Sie dies weiterhin tun. Wenn Sie eine Neuinstallation von Cygwin auf einem 64-Bit-Windows-Computer planen, sollten Sie die neue 64-Bit-Version von Cygwin verwenden, es sei denn, Sie benötigen bestimmte Pakete, die in der 64-Bit-Version noch nicht verfügbar sind.

6
einpoklum

Das andere Problem beim "Upgrade" auf 64-Bit ist, dass AFAIK nicht die Möglichkeit bietet, dieselbe Paketliste, die Sie bei der 32-Bit-Installation hatten, automatisch neu zu installieren, sodass Sie eine sorgfältige Liste erstellen müssen von installierten Paketen und überprüfen Sie sie sorgfältig in der neuen Installation, um zu dem Punkt zurückzukehren, an dem Sie sich vor der Neuinstallation befanden.

4
Pablo Halpern

Cygwin x64 bietet einige große Vorteile. Eine davon ist die bessere Speicherverwaltung. Ich habe viel experimentiert address already in use, oder fork: retry: Resource temporarily unavailable das zwang mich mehrmals am Tag ein rebaseall auszuführen.

Mit Cygwin x64 hatte ich noch nie solche Probleme.

2
nowox

Installieren Sie beide. Es nimmt nicht viel Zeit oder Speicherplatz in Anspruch und einige Pakete sind für cygwin64 nicht verfügbar. (Legen Sie sie in verschiedene Verzeichnisse!)

Ich weiß nicht, ob SQLite3 in Cygwin64 Datenbanken indizieren kann, die größer als 4 GB sind, aber ich weiß, dass SQLite3 in Cygwin32 und SQLite3 in 64-Bit-Linux dies nicht können.

cygwin64 hat immer noch kein pdftk (das PDF Toolkit)).

1
Phil Goetz

Nicht genug Reputation, um die ausgewählte Antwort zu kommentieren.

Was ist mit der Installation von Cygwin64 in c:\cygwin (über setup-x86_64.exe), mache eine sekundäre Cygwin32 Installation in c:\cygwin32 (über setup-x86.exe), dann füge hinzu /cygdrive/c/cygwin32/<for_each_of_the_bin_dirs> am Ende von $ PATH?

Dies sollte standardmäßig 64-Bit-Apps ausführen, aber das Aufrufen von 32-Bit-Apps zulassen, wenn die 64-Bit-Version nicht vorhanden ist.

Es wäre nützlich, wenn setup-x86_64.exe konnte eine versionsbewusste, einheitliche Liste aller Cygwin-Apps anzeigen und die 32-Bit-Installation nur bei Bedarf ausführen (mit einem Popup, das einen 64-Bit-Port vorschlägt).

0
BobC