2010-10-21 9 views
2

Supposons la plate-forme x86 64 et Linux.Quelle est la limite de taille de fichier objet ELF sur la plate-forme 64 bits?

Si vous regardez dans l'en-tête ELF, les décalages sont tous 64 bits.

Il est donc facile de créer un fichier objet plus grand que 4G avec relocatoin R_X86_64_64. Cela signifie qu'un fichier .o statique et un exécutable peuvent être aussi grands que 64 bits peuvent représenter. Cependant, pour la bibliothèque partagée, comme gcc, nous n'avons que la relocalisation R_X86_64_PLT32. Cela signifie qu'il est impossible de créer une bibliothèque partagée de plus de 4 Go, n'est-ce pas?

Donc, si je veux construire un énorme programme, l'un des fichiers .o est assez énorme (> 4 Go), le seul choix est la liaison statique?

Tout commentaire est le bienvenu.

Merci, limi

Répondre

2

Le x86-64 ABI used by Linux définit un « grand modèle » spécifiquement pour éviter de telles limitations de taille, qui comprend les types de relocalisation 64 bits pour la GOT et de PLT. (Voir le tableau de la section 4.4.2, et les séquences d'instructions de 3.5.5 qui montrent comment elles sont utilisées.)

+0

Merci beaucoup. J'ai lu l'ABI et j'ai remarqué que gcc commence à le supporter depuis 4.3. Je l'essaie maintenant. – limi

Questions connexes