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>
Installé les outils et les packages nécessaires pour le bâtiment GCC répertorié sur " Prérequis pour GCC une> "page. p> li>
Téléchargé des sources requises: a créé cette hiérarchie de répertoire: Binutils coché: p>
CD "$ {home} / src / binutils / i386-mingw32 /" 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"
" GCC-CORE-4.4. 1 "," GCC-G ++ - 4.4.1 "," Binutils-2.19.1 "," w32api-3.13-mingw32 " "," MINGWRT-3.16-MINGW32 " P> LI>
"$ {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>
../../binutils-2.19.1/configure --prefix = "$ {home} / gcc" --target = i386-mingw32 --Disable-nls
faire de
make install p> li>
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
3 Réponses :
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? P>
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.
C'est vraiment correct: la façon dont les choses vont, vous devez p>
dllcrt2.o code>) li>
- Construisez un compilateur C complet C (et d'autres fronts, tels que C ++, Fortran, ADA, peu importe, si vous le souhaitez) LI>
ol>
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 code> dans votre répertoire de construction GCC. P>
Donc, vous devez passer à l'étape suivante et ne vous inquiétez pas de votre échec actuel. P>
(Pour installer le compilateur partial C, vous devez exécuter faire code> avec l'option -k code> pour le faire mieux, même face aux erreurs. Par exemple, utilisez make -k installer code>.) P>
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 code> (pour OpenMP) si la bibliothèque Pthreads-Win32 est installée.
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/ P>
Juste au cas où vous ne voulez pas passer beaucoup de temps à essayer de le construire vous-même. p>