Il faut comprendre que ta chaine de compilation est en réalité composée de trois projets distincts :
Les compilateurs et l'éditeur de liens sont assez indépendant pour pouvoir générer du code 32bits et / ou 64 bits, à partir du moment où ils disposent de l'indispensable (fichiers d'en-tête adaptés à la version demandée pour le compilateur, bibliothèque compilée pour la bonne version pour l'éditeur de liens).
- Binutils, qui fournit essentiellement des outils pour manipuler les fichiers binaires et les fichier objets (dont ld qui est l'éditeur de liens)
- Gcc qui fournit la collection de compilateurs susceptibles de compiler différents langages
- la CRT qui fournit les bibliothèques utiles à l'édition de lien (et qui est fournie par le projet mingw-w64)
Si l'éditeur de liens te dit qu'il ignore une bibliothèque parce qu'il a rencontrés "des pointeurs de type incompatible", c'est que la CRT n'est fournie que dans une seule version (par exemple 64 bits, alors que tu as spécifiquement demandé à ce que l'exécutable soit en version 32bits).
Je ne me suis jamais intéressé à tdm en tant que tel, et je ne connais donc pas leur politique en ce qui concerne la gestion du multilib. Mais, selon ce que tu m'explique, j'aurais tendance à croire qu'ils fournissent des versions qui ne supportent pas le multilib. Du moins, pour la CRT.
Tu as normalement un dossier x86_64-w64-mingw32 dans le dossier racine de MinGW.
Tu y trouveras les fichiers de la CRT dans différents dossiers, dont un dossier lib, un éventuel dossier lib_32 et un éventuel dossier lib_64.
Si tu ne trouves pas l'un des dossiers (le seul qui existera d'office étant le dossier lib), c'est que la CRT n'a pas été compilée en version multilib.
Le problème, c'est que, si la CRT n'a pas été compilée en version multilib, il y a de fortes chances pour que les bibliothèques internes de Gcc (libstdc++, libquadmath et les autres) ne l'aient pas été non plus.
Je te disais dans mon intervention précédente de vérifier si tu avais bien deux versions différentes pour les bibliothèques, statiques comme dynamiques. Généralement, les versions 64 bits sont de taille (largement) supérieure aux versions 32 bits.
A titre de comparaison, les tailles pour les dlls de mon coté ressemblent à ceci (je rappelle que c'est une compilation perso ) et les tailles pour les libXX.a suivent une boucle à peu près similaire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 DLL | taille 32bits | taille 64bits libgcc_s_sjlj-1.dll | 470 ko | 533 Ko libgfortran-3.dll | 4686 Ko | 6675 Ko libgomp-1.dll | 324 Ko | 407 Ko libquadmath-0.dll | 878 Ko | 1030 Ko libssp-0.dll | 107 Ko | 141 Ko libstdc++-6.dll | 6533 Ko | 8428 Ko
Partager