2015-08-26 1 views
9

Je souhaite effectuer une compilation croisée de GCC. J'utilise MSYS2 comme shell, et mingw-w64 comme compilateur.La génération de binutils échoue à cause du fichier pex-unix

J'ai téléchargé Binutils-2.25 et je configurer avec:

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

Je reçois une erreur lorsque je tente de construire binutils sur fichier libiberty/pex-unix:

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)

J'ai construit le même compilateur quelques il y a des mois sans problèmes. Mais j'ai changé depuis OS (Windows 7 à W10) et le compilateur (MinGW-GCC 4.8 à Mingw64-GCC 4.9)

Je suivais this tutorial

+0

Je trouve une ligne étrange sur libiberty/config.log 'pexecute =" pex-unix "'. Peut-être configurer ne pas détecter Windows 10. Pensez-vous que c'est possible? – Intelligide

Répondre

7

J'ai trouvé la solution:

J'utilise MSys2 avec msys2_shell cela définit - -msys comme système hôte.

Mais quand j'utilise mingw32_shell (qui définit - -mingw32 comme hôte), GNU make compiler PEX-win32 et il est fonctionne très bien

0

Le problème est que, par défaut, lors de l'exécution GNU configure scripts sous MSYS2, le système build et host est signalé comme i686-pc-msys ou x86_64-pc-msys.

Toutefois, le script de configuration pour binutils (et gcc) ne reconnaît pas msys dans la troisième partie, donc la version par défaut est une version Unix. Cela, à son tour, conduit à pex-unix être compilé, ce qui nécessite les fonctionnalités POSIX dans sys/wait.h, qui n'est pas fourni par MinGW-w64.

Les scripts de configuration ont des cas particuliers pour cibles mingw* et cygwin*, qui conduisent à la compilation pex-win32.c au lieu, en évitant le problème.


Je pense que la solution envisagée est que lorsque nous voulons construire en utilisant MinGW-w64, nous devrions lancer MSYS2 en utilisant le raccourci "MSYS2 MinGW 32 bits" ou "MSYS2 MinGW 64 bits". Ces raccourcis configurent les variables d'environnement afin que la chaîne Host soit définie sur i686-w64-mingw32 ou i686-w64-mingw64 (ou x86_64 au lieu de i686 dans les deux cas si vous avez utilisé MSYS2 64 bits). Ensuite, le script binutils configure récupère son boîtier mingw et construit la bonne chose.

Cependant, en compilant binutils-2.28, même s'il a essayé de construire pex-win32.c, j'ai eu un tas d'erreurs de compilation: _open n'a pas été déclaré, et ainsi de suite. Je n'ai pas étudié cela plus loin parce que j'ai essayé quelque chose d'autre qui s'est avéré fonctionner: J'ai lancé le shell MSYS2 standard (pas les variantes MinGW-w64), j'ai mis /mingw32/bin sur le devant de PATH, et j'ai passé le l'argument --build=i686-w64-mingw32 à configure pour binutils et gcc.

Cela a réussi et j'ai été en mesure de construire une chaîne d'outils cross complète (pour arm-eabi v0 en fait), qui n'avait pas de dépendance MSYS2.