staging.inyokaproject.org

Cygwin Verständnisfrage

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

IRQ

Anmeldungsdatum:
5. Februar 2006

Beiträge: 43

Hi,

ich nutze normalerweise Ubuntu und habe mir nach der Anleitung hier im Wiki eine GNU ARM-Toolchain erstellt. Da die anderen im Team (Uni) aber Windows verwenden, habe ich mir gedacht, da gibts doch dieses Cygwin, machste das Gleiche halt unter Windows nochmal!

Also Cygwin installiert und in der Cygwin-Konsole alles nochmal runtergerattert. Hat prima funktioniert. Wenn ich jetzt aber über die Windows-Shell die erstellten .exe Dateien aufrufen will, kommt folgende Fehlermeldung:

c:\cygwin\opt\gnuarm\bin>arm-elf-gcc
    299 [main] ? (4252) c:\cygwin\opt\gnuarm\bin\arm-elf-gcc.exe: *** fatal erro
r - system shared memory version mismatch detected - 0x8A88009C/0x2D1E009C.
This problem is probably due to using incompatible versions of the cygwin DLL.

In der Cygwin-Konsole funktioniert es jedoch perfekt. Heißt das, ich kann Programme, die ich in der Cygwin-Shell erstelle, nicht direkt aufrufen? Sind die irgendwie verkrüppelt bzw hängen mit dieser cygwin1.dll zusammen?

Die Binaries in c:/cygwin/bin lassen sich auch aus der Windows-Konsole ausführen. Wäre es möglich, die Toolchain auch direkt zu erstellen? Ich bin daran gescheitert, dass ./configure nicht wollte, da ja bash...

Vielleicht kann mir da jemand Klarheit verschaffen ☺

Ach ja: An verschiedenen Versionen der DLL liegt es natürlich nicht, da habe ich nur eine!

IRQ

(Themenstarter)

Anmeldungsdatum:
5. Februar 2006

Beiträge: 43

Ok, die Nacht wurde noch etwas länger und heute Morgen gings weiter. Dafür bin ich jetzt soweit:

  • Wenn man in der Cygwinn-Shell kompiliert, sind die Programme immer von der cygwin1.dll abhängig. Das kann man sich mittels objdump anzeigen lassen:

1
2
3
  $ objdump -p hello.exe | grep "DLL Name"
  DLL Name: cygwin1.dll
  DLL Name: kernel32.dll
  • Man kann angeblich mittels der Compiler-Option "-mno-cygwin" bewirken, dass dies nicht der Fall ist (zu lesen hier: http://www.delorie.com/howto/cygwin/mno-cygwin-howto.html)

  • Also vor dem Aufruf von ./configure die Umgebungsvariable CFLAGS=CFLAGS=-mno-cygwin setzen. Hat bei mir aber probeweise bei "sed" nicht geklappt (binutils etc. dauert immer gleich so lange...). Vielleicht wird CFLAGS überschrieben, keine Ahnung, da müsste man wohl mal das Conf-Skript studieren. Aber...

Die Lösung: MinGW

  • Etwas umständlicher zu installieren als Cygwin, da man noch MSYS benötigt und diverse tar.gz manuell herunterladen und in die richtigen Ordner entpacken.

  • Dafür startet man einfach die MSYS-Konsole und tut genauso wie unter Cygwin/Linux (./configure & make ohne groß Optionen für sed) →

  • Man erhält eine tolle sed.exe, die sich auch auf anderen Rechnern ausführen lässt (getestet).

Allen die's brauchen viel Spaß beim Win-Binaries erstellen!

IRQ

(Themenstarter)

Anmeldungsdatum:
5. Februar 2006

Beiträge: 43

Ok, DIE Lösung war MinGW leider auch nicht, da sich der GCC nicht kompilieren ließ. Maulte, dass die GMP-Lib fehle, doch weder Nachinstallieren des msys gmp Paketes, noch Pfadangaben für configure halfen. Auch ein Versuch die Lib selbst zu kompilieren schlug fehl. Wollte schon fast wieder das traute Linux booten um mir da einen Cross-Compiler für Windows zu erstellen und mit diesem dann den ARM-Cross-Compiler *arg*, da bin ich auf einen Forenbeitrag gestoßen, indem erwähnt wurde, dass man einfach die cygwin1.dll in den Ordner mit den erwähnten Binaries stecken soll. Und siehe da: Es funktioniert! Man kann die .exe Dateien aus der Windows-Shell ausführen! Alternativ geht auch das Setzen einer Umgebungsvariable. Halleluja...

Antworten |