Question

Je travaille sur l’écriture d’un noyau et quelques amis travaillent avec moi sur le projet. Cela fait un moment que nous utilisons DJGPP pour compiler le projet, mais nous rencontrons des problèmes de compatibilité entre plates-formes avec cette méthode qui ont empêché mon composant principal, Partnet, de compiler sous Windows XP. (GCC de DJGPP a des problèmes avec des listes d’arguments plus longues que 127 sur Windows XP, mais pas avec les mêmes listes d’arguments sous Vista. Donc, pour une fois, Vista fonctionne mieux que XP à quelque chose. O.O)

N'importe qui, plutôt que d'essayer de trouver une solution pour compiler avec DJGPP, nous avons décidé de nous séparer totalement de DJGPP et de travailler avec une version différente de GCC pour Windows. Le problème, c'est que MinGW (à ma connaissance) ne nous permet pas d'utiliser la syntaxe NASM pour les parties d'assemblage du code et qu'il serait un peu fastidieux de tout convertir en syntaxe AT & T à ce stade. Possible bien sûr, car il est assez tôt dans le projet, mais c'est pénible.

Alors maintenant vous connaissez le problème. Ma question est la suivante: quelle distribution du compilateur GCC pour Windows nous permettra-t-elle le plus facilement de porter ce projet sur lui-même? Idéalement, nous recherchons quelque chose qui puisse faire la syntaxe d'assembleur NASM, ne pas dépendre des dll externes (c’est un noyau, il n’y aura pas accès) et qui fonctionnera de manière cohérente sur plusieurs versions de Windows. Quelles sont vos recommandations sur la meilleure façon de procéder, et quelle version de GCC pour Windows recommandez-vous?

Notez que si nous devons convertir le projet en syntaxe AT & T, ce n'est pas grave, j'aimerais simplement ne pas le faire. Nous utilisons actuellement NASM pour assembler les éléments d’assemblage de celui-ci, ce qui produit un fichier .o valide, mais MinGW ne peut pas le lier pour une raison quelconque. Je pense que les bits d'assemblage en ligne (peut-être 5 lignes) sont déjà la syntaxe AT & T, comme l'exige GCC.

Merci!

Était-ce utile?

La solution

Vous passez probablement le type d'objet incorrect à nasm avec l'option -f.

Je parie que vous passez -f coff.

Vous devrez passer -f win32.

Autres conseils

Construisez un compilateur croisé.

http://wiki.osdev.org/GCC_Cross-Compiler

C'est ce que j'ai fait lors de la transition de DJGPP pour le développement sur un hôte Windows. Je recommande la méthode Cygwin, car elle est légèrement plus stable que MSYS.

Une fois que vous avez terminé, configurez NASM pour générer les fichiers objet elf32 , et le tour est joué.

Utilisez-vous NASM compilé pour DOS ou Windows? Je n'ai pas regardé, mais il est possible qu'il y ait une différence. De plus, si votre MSNA est trop ancienne, elle risque de ne pas pouvoir générer quelque chose que MinGW peut comprendre.

Une recherche rapide dans Google a révélé un tutoriel sur la compilation de x264 sous MinGW , où l’une des étapes consiste à compiler NASM sur MinGW.

Sinon, vous pouvez essayer (comme suggéré dans un commentaire à une autre réponse) en utilisant objcopy.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top