2015-08-26 14 views
9

Chcę skompilować krzyżowo GCC. Używam MSYS2 jako powłoki, a mingw-w64 jako kompilatora.Kompilacja binutils nie powiodła się z powodu pliku pex-unix

Pobrałem binutils-2,25 i skonfigurować z:

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

pojawia się błąd, gdy próbuję zbudować binutils na libiberty/pex-unix pliku:

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)

zbudował ten sam kompilator mało miesiące temu bez problemów. Ale mam od zmienionego systemu operacyjnego (Windows 7 do W10) i kompilatora (MinGW GCC 4.8 do Mingw64-GCC 4.9)

Śledziłem this tutorial

+0

Znajduję dziwną linię na libiberty/config.log 'pexecute =" pex-unix "'. Może konfiguracja nie wykrywa systemu Windows 10. Czy uważasz, że to możliwe? – Intelligide

Odpowiedz

7

znalazłem rozwiązanie:

używam MSys2 z msys2_shell który definiuje - -msys jako system hosta.

Ale gdy używam mingw32_shell (który definiuje - -mingw32 jako gospodarz), GNU Dokonaj kompilacji PEX-win32 i to działa dobrze

0

Problemem jest to, że domyślnie, gdy uruchomiony GNU configure skrypty pod System MSYS2, build i host jest zgłaszany jako i686-pc-msys lub x86_64-pc-msys.

Jednak skrypt konfiguracyjny dla binutils (i gcc) nie rozpoznaje msys w trzeciej części, więc kompilacja domyślnie jest kompilacją Uniksa. To z kolei prowadzi do kompilacji pex-unix, co wymaga funkcji POSIX w sys/wait.h, czego nie zapewnia MinGW-w64.

Skrypty konfiguracyjne mają specjalne przypadki dla celów mingw* i cygwin*, co prowadzi do kompilowania pex-win32.c zamiast tego, aby uniknąć problemu.


myślę zamierzona rozwiązaniem jest to, że gdy chcemy budować za pomocą MinGW-W64, powinniśmy uruchomić MSYS2 używając skrótu "MSYS2 MinGW 32-bitowego" lub "MSYS2 MinGW 64-bitowego". Skróty te konfigurują zmienne środowiskowe, tak aby ciąg Host był ustawiony na i686-w64-mingw32 lub i686-w64-mingw64 (lub x86_64 zamiast i686 w obu przypadkach, jeśli użyto 64-bitowego MSYS2). Następnie skrypt konfiguracyjny binutils odbiera jego obudowę mingw i buduje właściwą rzecz.

Jednak kompilując binutils-2.28, mimo że próbowałem zbudować pex-win32.c, otrzymałem pakiet błędów kompilacji: _open nie został zadeklarowany, i tak dalej.

Nie badałem tego dalej, ponieważ najpierw wypróbowałem coś innego, co okazało się skuteczne: uruchomiłem standardową powłokę MSYS2 (nie warianty MinGW-w64), wstawiłem /mingw32/bin z przodu PATH i minąłem Argument --build=i686-w64-mingw32 do configure dla binutils i gcc.

To się udało i udało mi się zbudować kompletny krzyżowy toolchain (właściwie dla arm-eabi v0), który nie posiadał zależności MSYS2.

Powiązane problemy