GCC/G ++ de MingW donne des erreurs de relocalisation lors de la création d'applications avec de grandes données globales ou statiques.MingW Windows GCC ne peut pas compiler un programme c avec des données globales de 2 Go
Understanding the x64 code models
Les références à la fois le code et les données sur 64 bits sont effectués avec instruction de rapport (RIP-parent dans le langage x64) modes d'adressage. Le décalage de RIP dans ces instructions est limité à 32 bits.
Le petit modèle de code promet au compilateur que les décalages relatifs 32 bits devraient être suffisants pour toutes les références de code et de données dans l'objet compilé. D'autre part, le modèle à grand code lui dit de ne pas faire d'hypothèses et d'utiliser des modes d'adressage absolus de 64 bits pour les références de code et . Pour rendre les choses plus intéressantes, il y a aussi une route intermédiaire , appelée le modèle de code moyen.
Pour le programme d'exemple ci-dessous, malgré l'ajout d'options mcmodel = moyenne ou -mcmodel = grand le code ne peut pas compiler
#define SIZE 16384
float a[SIZE][SIZE], b[SIZE][SIZE];
int main(){
return 0;
}
gcc -mcmodel=medium example.c fails to compile on MingW/Cygwin Windows, Intel windows /MSVC
Veuillez publier la sortie du compilateur. –
1. Intel de Windows/MSVC2015 LINK: erreur fatale LNK1248: taille de l'image (8000A000) dépasse la taille maximale admissible (80000000) 2. Mingw, Cygwin "relocalisation tronquée pour s'adapter: R_X86_64_PC32 contre" Windows => 3 Compile sur GCC 4.8 Linux (sous-système Linux (Ubuntu 14.04) de Windows nouvelle mise à jour d'anniversaire) et d'autres distributions GCC linux sur Ubuntu 4. Il semble que l'option de compilation mcmodel n'est pas autorisée sur aucune fenêtre gcc ciblée – Dhiraj
Je pensais que nous avions tout quitté ce modèle de mémoire des ordures derrière avec le mode réel x86. Je frémis encore à l'idée des mots minuscules, petits, moyens, compacts, grands et immenses à proximité :-) – paxdiablo