2009-09-24 11 views
7

Chcę zbudować "cross-kompilator gcc", aby kompilować aplikacje "c/C++" w środowisku "Linux", ale w celu "Windows".Budowanie kompilatora krzyżowego GCC (od "Linux" do "Windows")

zrobiłem to do tej pory:

  1. zainstalowane niezbędne narzędzia i pakiety dla GCC podany na stronie „Prerequisites for GCC” budynek.

  2. pobrane wymagane źródła:
    "gcc-core-4.4.1", "gcc-g++-4.4.1", "binutils-2.19.1", "w32api-3.13-mingw32", "mingwrt-3.16-mingw32"

  3. Utworzono ta hierarchia katalogu:
    „$ {HOME}/gcc/"- dla końcowego kompilatora krzyżowego
    " $ {HOME}/src/"- dla źródeł
    " $ {HOME}/src/build-binutils/i386-mingw32/"- do budowania binutils na" i386-mingw32 " target
    "$ {HOME}/Src/build-gcc/i386-mingw32/"- dla gcc budynek "i386-mingw32" target

  4. Builded pakiet binutils:

    cd" $ {HOME}/src/build-binutils/i386 -mingw32 /”
    ../../binutils-2.19.1/configure prefix = "$ {HOME}/gcc" --target = i386-mingw32 --disable-nls
    zrobić
    make install

  5. skopiowane "W32api" i nagłówki do katalogu instalacyjnego "mingwrt":

    cp -R "$ {HOME} /src/w32api-3.13-mingw32/include" "$ {HOME}/gcc/i386-mingw32"
    cp -R "$ {HOME} /src/mingwrt-3.16- mingw32/include” "$ {HOME}/gcc/i386-mingw32"


A teraz gdy próbuję zbudować "C (tylko) cross-kompilatora":

cd "${HOME}/src/build-gcc/i386-mingw32/" 
../../gcc-4.4.1/configure --prefix="${HOME}/gcc" --target=i386-mingw32 --enable-languages=c --with-headers="${HOME}/gcc/i386-mingw32/include" --disable-nls 
make<br> 

to było budowanie coś około 4 minut, a następnie daje mi te błędy:

${HOME}/gcc/i386-mingw32/bin/ld: dllcrt2.o: No such file: No such file or directory 
collect2: ld returned 1 exit status 
make[2]: *** [libgcc_s.dll] Error 1 
make[2]: Leaving directory `${HOME}/src/build-gcc/i386-mingw32/i386-mingw32/libgcc' 
make[1]: *** [all-target-libgcc] Error 2 
make[1]: Leaving directory `${HOME}/src/build-gcc/i386-mingw32' 
make: *** [all] Error 2 

Z tego komunikatu o błędzie naprawdę nie wiem, co teraz zrobić: - (((.


Czy ktoś wie, gdzie jest problem?
Dzięki.

Odpowiedz

11

To rzeczywiście OK: droga rzeczy iść, trzeba

  1. kompilacji binutils
  2. zainstalować nagłówki
  3. zbudować częściowy kompilatora C: na tyle, by tworzyć pliki obiektu, ale nie na tyle, aby połączyć
  4. zbudować Win32API i MinGW Runtime (który zawiera brakujące dllcrt2.o)
  5. zbudowanie kompletnego kompilatora C (i inne front-end, takich jak C++, Fortran, Ada, cokolwiek, jeśli wan t one)

Pomyślnie wykonano krok 3 powyżej; nie udało się zbudować biblioteki libgcc (która jest biblioteką pomocniczą GCC), ale oznacza to, że rdzeń kompilatora C jest funkcjonalny (chociaż nie będzie mógł połączyć się, może nadal tworzyć poprawne pliki obiektów). Możesz to sprawdzić, patrząc na plik gcc/xgcc w swoim katalogu budowania GCC.

Musisz przejść do następnego kroku, nie przejmując się obecną awarią.

(Do Actuall zainstalować częściową kompilatora C, należy uruchomić make z opcją -k, aby to zrobić to najlepiej, nawet w obliczu błędów. Na przykład, użyj make -k install.)

+0

Dziękuję bardzo za komentarz: "Wykonałeś krok 3 powyżej". Pomyślałem, że jeśli dostanę jakiś błąd, nie mogę przejść do następnego kroku, ale (na szczęście) myliłem się. Następnie z powodzeniem skompilowałem program win32api, ale dostałem kilka błędów, gdy próbowałem skompilować mingwrt - coś było nie tak z "gwintowaniem". Dlatego zdecydowałem się skompilować gcc z tymi parametrami: --prefix = "$ {HOME}/gcc" --target = i386-mingw32 --program-prefix = i386-mingw32 --enable-languages ​​= c, C++ --with -headers = "$ {HOME}/gcc/i386-mingw32/include" --disable-nls --disable-threads --disable-shared --disable-libssp. I to zadziałało !!! – Petike

+0

Przepraszam za mały błąd z poprzedniego komentarza: problem był w opcji "udostępnionej", a NIE w opcji "wątki". Tak więc została skompilowana również bez określonego "--disable-threads". – Petike

+0

Jeśli chodzi o wątki, możesz również zbudować GCC z '--enable-libgomp' (dla OpenMP), jeśli masz zainstalowaną bibliotekę pthreads-win32. –

0

Przeszedłem przez źródła MinGW i odkryłem, że dllcrt2.o jest czymś zbudowanym z pakietu mingwrt. Zakładam, że musisz skompilować i zainstalować, a nie tylko skopiować nagłówki?

+0

Tak, tak. Kopiowanie nagłówków jest jednym z wielu kroków. Po 5 kroku w moim poście powinienem to zrobić: -6. Zbuduj "c (tylko) cross-kompilator". -7. Dodaj lokalizację z właśnie skompilowanymi plikami binarnymi do zmiennej środowiskowej "PATH". -8. Zbuduj "win32api". -9. Zbuduj "mingwrt". -10. Zbuduj "kompilator krzyżowy c i C++". Ale teraz jestem dopiero na 6 kroku i otrzymuję ten błąd. – Petike

+0

Hmmm ... nie bawiłem się z MinGW. Ale kiedy ustawiam cross-kompilator pierwszego stopnia, używam "--without-headers" na linii configure, aby nie polegać na bibliotece C lub środowisku wykonawczym dla celu. Nie wiem, jak się podążasz i jak działa z MinGW, ale może dasz temu szansę. – DevSolar

Powiązane problemy