8
votes

Compilateur Cross Cross Construire (de "Linux" à "Windows")

Je veux construire "Cross-compilateur GCC" pour compiler les applications "C / C ++" sur l'environnement "Linux", mais pour la cible "Windows".

Je l'ai fait jusqu'à présent: P>

  1. Installé les outils et les packages nécessaires pour le bâtiment GCC répertorié sur " Prérequis pour GCC une> "page. p> li>

  2. Téléchargé des sources requises:
    "
    GCC-CORE-4.4. 1 "," GCC-G ++ - 4.4.1 "," Binutils-2.19.1 "," w32api-3.13-mingw32 " "," MINGWRT-3.16-MINGW32 " P> LI>

  3. a créé cette hiérarchie de répertoire:
    "$ {Home} / gcc /" - pour le compilateur cross-compilateur final "$ {Home} / src /" - pour sources
    "$ {Home} / src / bumin-binutils / i386-mingw32 /" - pour la construction de bintituriers à "i386-mingw32" de
    "$ {Home} / src / build-gcc / i386-mingw32 /" - pour la construction de la cible "I386-MINGW32" P> LI>

  4. Binutils coché: p>

    CD "$ {home} / src / binutils / i386-mingw32 /"
    ../../binutils-2.19.1/configure --prefix = "$ {home} / gcc" --target = i386-mingw32 --Disable-nls

    faire de
    make install p> li>

  5. Copié les en-têtes "W32API" et "MINGWRT" vers le répertoire d'installation: P>

    cp -r "$ {home }rc/w32api-3.13-mingw32/include" "$ {home} / gcc / i386-mingw32"
    cp -r "$ {home }rc/mingwrt-3.16-mingw32/include" "$ {home} / gcc / i386-mingw32" p> l> ol>


    Et maintenant, quand je suis en train de construire le "c (uniquement) compilateur croisé": p>

    ${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
    


0 commentaires

3 Réponses :


0
votes

J'ai grepé à travers les sources MINGW et j'ai constaté que DLLCRT2.O est quelque chose construit sur le paquet MINGWRT. Je suppose que vous devez compiler et installer cela, pas seulement copier les en-têtes?


2 commentaires

Oui oui. Copier des en-têtes n'est qu'un de nombreuses étapes. Après la 5ème étape de mon poste, je devrais faire ceci: -6. Construire "C (seulement) Compilateur croisé". -7. Ajoutez l'emplacement avec juste des fichiers binaires compilés à une variable d'environnement "chemin". -8. Construire "Win32api". -9. Construire "mingwrt". -dix. Construire "C et C ++ Cross-compiler". Mais pour le moment, je suis juste à la 6ème étape et à obtenir cette erreur.


Hmmm ... n'ai pas joué avec Mingw moi-même. Mais lorsque je configurais un compilateur croisé de première étape, j'utilise "--ans-en-têtes" sur la ligne de configuration pour lui dire de ne pas compter sur une bibliothèque ou un runtime de la cible. Je ne sais pas quels sont les suivants et comment les choses fonctionnent avec Mingw, mais peut-être que vous lui donnez un coup de feu.



12
votes

C'est vraiment correct: la façon dont les choses vont, vous devez

  1. construire des bintituaux
  2. Installez les en-têtes
  3. Construisez le compilateur C Partial C: suffisamment pour créer des fichiers d'objet, mais pas assez pour lier
  4. Construisez le runtime Win32API et Mingw (qui inclut votre dllcrt2.o )
  5. Construisez un compilateur C complet C (et d'autres fronts, tels que C ++, Fortran, ADA, peu importe, si vous le souhaitez)

    Vous avez réussi l'étape 3 ci-dessus; Il échoue à la construction de Libgcc (qui est une bibliothèque de support GCC), mais cela signifie que le noyau C compilateur C est fonctionnel (bien que cela ne puisse pas être en mesure de créer des fichiers d'objet valides). Vous pouvez vérifier cela en regardant le fichier gcc / xgcc dans votre répertoire de construction GCC.

    Donc, vous devez passer à l'étape suivante et ne vous inquiétez pas de votre échec actuel.

    (Pour installer le compilateur partial C, vous devez exécuter faire avec l'option -k pour le faire mieux, même face aux erreurs. Par exemple, utilisez make -k installer .)


3 commentaires

Merci beaucoup pour votre commentaire: "Vous avez réussi à l'étape 3 ci-dessus". Je pensais que si je reçois une erreur, je ne peux pas aller à l'étape suivante, mais (heureusement) j'avais tort. Ensuite, j'ai compilé avec succès Win32api, mais j'ai eu des erreurs lorsque j'ai essayé de compiler Mingwrt - quelque chose n'allait pas avec "enfiler". J'ai donc décidé de compiler GCC avec ces paramètres: --Prefix = "$ {home} / gcc" --target = i386-mingw32 --Program-préfixe = i386-mingw32 --enable-langues = C, C ++ -. -Deaders = "$ {home} / gcc / i386-mingw32 / include" -Disable-nls -adis-threads --Disable-partagé --Disable-libsv. Et cela a fonctionné !!!


Je suis désolé pour une petite erreur du commentaire précédent: le problème était dans l'option "partagée" et non avec l'option "threads". Donc, il a également compilé sans "threads -Distables" spécifiés.


En ce qui concerne les threads, vous pouvez également construire GCC avec - Activer-libgomp (pour OpenMP) si la bibliothèque Pthreads-Win32 est installée.



1
votes

Il y a des compilateurs croisés précompilés de Mingw-W64 disponibles. Cela permet de compiler des fichiers windows natifs 32 et 64 bits à partir de Linux, un tutoriel de deux minutes est disponible à http://www.blogcompler.com/2010/07/11/comple-for-windows-on-linux/

Juste au cas où vous ne voulez pas passer beaucoup de temps à essayer de le construire vous-même.


0 commentaires