2015-08-26 11 views
9

Ich möchte GCC Cross-kompilieren. Ich verwende MSYS2 als Shell und mingw-w64 als Compiler.Binutils Build schlägt fehl, weil Pex-Unix-Datei

ich habe binutils-2.25 und ich konfigurieren:

../binutils/./configure --target=sh3eb-elf --prefix=C:/tempinstall/ --disable-nls 

Ich erhalte eine Fehlermeldung, wenn ich versuche binutils auf libiberty/pex-unix-Datei zu erstellen:

In function 'pex_wait': error: 'F_GETFD' undeclared (first use in this function) error: 'FD_CLOEXEC' undeclared (first use in this function) error: 'F_SETFD' undeclared (first use in this function) error: 'F_DUPFD' undeclared (first use in this function)

In function 'restore_fd': error: 'FD_CLOEXEC' undeclared (first use in this function) error: 'F_SETFD' undeclared (first use in this function)

In function 'pex_unix_fdopenw': error: 'F_SETFD' undeclared (first use in this function) error: 'FD_CLOEXEC' undeclared (first use in this function)

ich die gleichen Compiler wenige gebaut Monate ohne Probleme. Aber ich habe da geänderte Betriebssystem (Windows 7 bis W10) und Compiler (MinGW-GCC 4.8 zu Mingw64-GCC 4.9)

Ich folgte this tutorial

+0

Ich finde eine seltsame Zeile auf libiberty/config.log 'pexecute =" pex-unix "'. Vielleicht konfigurieren Sie Windows 10 nicht. Glauben Sie, dass es möglich ist? – Intelligide

Antwort

7

ich die Lösung gefunden:

I MSys2 mit msys2_shell verwenden das definiert - -msys als Host-System.

Aber wenn ich mingw32_shell (das definiert - -mingw32 als Host), GNU-Make PEX-win32 kompilieren und es funktioniert gut

0

Das Problem ist, dass standardmäßig, wenn Sie GNU configure Skripte unter MSYS2, das System build und host wird als i686-pc-msys oder x86_64-pc-msys gemeldet.

jedoch der Configure-Skript für binutils (und gcc) nicht erkennt msys im dritten Teil, so dass die Build standardmäßig auf ein Unix-Build. Dies wiederum führt dazu, dass pex-unix kompiliert wird, was die POSIX-Funktionen in sys/wait.h erfordert, die nicht von MinGW-w64 bereitgestellt werden.

Die Konfigurationsskripte haben spezielle Fälle für die Ziele mingw* und cygwin*, die dazu führen, pex-win32.c stattdessen zu kompilieren, das Problem zu vermeiden.


Ich denke, die beabsichtigte Lösung ist, dass, wenn wir MinGW-w64 mit aufbauen wollen, wir MSYS2 mit der Abkürzung "MSYS2 MinGW 32-Bit" oder "MSYS2 MinGW 64-Bit" starten soll. Diese Verknüpfungen richten Umgebungsvariablen ein, sodass die Host-Zeichenfolge auf i686-w64-mingw32 oder i686-w64-mingw64 (oder x86_64 anstelle von i686 in beiden Fällen gesetzt wird, wenn Sie 64-Bit MSYS2 verwendet haben). Dann nimmt das Script "binutils configure" seinen mingw Fall auf und baut das Richtige auf.

Allerdings kompiliert binutils-2.28, obwohl es versucht, pex-win32.c zu bauen, habe ich eine Reihe von Kompilierungsfehlern: _open wurde nicht deklariert, und so weiter.

Ich habe das nicht weiter untersuchen, weil ich etwas anderes erste, die Arbeit nach außen gekehrt versucht: Ich habe den Standard MSYS2 Shell gestartet (nicht die MinGW-w64 Varianten), habe ich /mingw32/bin auf der Vorderseite PATH, und ich verabschiedete die Argument --build=i686-w64-mingw32 zu configure für binutils und gcc.

Dies war erfolgreich und ich konnte eine komplette Cross-Toolchain (für Arm-eabi v0 tatsächlich), die keine MSYS2-Abhängigkeit hatte.