2015-08-26 32 views
9

Desidero compilare in modo incrociato GCC. Sto usando MSYS2 come shell e mingw-w64 come compilatore.non riesce a causa del file pex-unix

ho scaricato binutils-2.25 e configura con:

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

ho un errore quando provo a costruire binutils su libiberty/pex-unix del file:

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)

ho costruito lo stesso compilatore poche mesi fa senza problemi. Ma allora ho cambiato sistema operativo (Windows 7 per W10) e compilatore (MinGW-GCC 4.8 per Mingw64-GCC 4.9)

ho seguito this tutorial

+0

Trovo una strana riga su libiberty/config.log 'pexecute =" pex-unix "'. Forse configurare non rilevare Windows 10. Pensi che sia possibile? – Intelligide

risposta

7

ho trovato la soluzione:

Io uso MSys2 con msys2_shell che definisce - -msys come sistema host.

Ma quando uso mingw32_shell (che definisce - -mingw32 come ospite), GNU-Fai compilare PEX-win32 e sta funziona benissimo

0

Il problema è che, per impostazione predefinita, durante l'esecuzione di GNU configure script sotto MSYS2, il sistema build e host viene segnalato come i686-pc-msys o x86_64-pc-msys.

Tuttavia, lo script di configurazione per binutils (e gcc) non riconosce msys nella terza parte, quindi la configurazione predefinita è una build Unix. Questo, a sua volta, porta alla compilazione di pex-unix, che richiede le funzioni POSIX in sys/wait.h, che non è fornito da MinGW-w64.

gli script di configurazione hanno casi particolari per gli obiettivi mingw* e cygwin*, che portano alla compilazione pex-win32.c invece, evitando il problema.


Penso che la soluzione prevista è che quando vogliamo costruire usando MinGW-W64, dovremmo lanciare MSYS2 usando la scorciatoia "MSYS2 MinGW a 32 bit" o "MSYS2 MinGW a 64-bit". Queste scorciatoie impostano le variabili di ambiente in modo che la stringa host sia impostata su i686-w64-mingw32 o i686-w64-mingw64 (o x86_64 anziché su i686 in entrambi i casi se si utilizza MSYS2 a 64 bit). Quindi lo script configure di binutils riprende il suo caso mingw e crea la cosa giusta.

Tuttavia, compilando binutils-2.28, anche se ha provato a creare pex-win32.c, ho ricevuto un sacco di errori di compilazione: _open non è stato dichiarato e così via.

Io non indagare ulteriormente perché ho provato qualcosa di diverso prima che si rivelò al lavoro: ho lanciato il guscio MSYS2 standard (non le varianti MinGW-W64), ho messo /mingw32/bin sulla parte anteriore del PATH, e ho passato la argomento --build=i686-w64-mingw32 a configure per binutils e gcc.

Questo è riuscito e sono riuscito a creare una croce completa toolchain (per arm-eabi v0 in realtà), che non aveva la dipendenza MSYS2.