2013-09-30 5 views
2

Normalement, en utilisant KEEP(), ld conserve les symboles dans la section même si les symboles ne sont pas référencés. Cependant, ce n'est pas mon expérience. Je ne peux pas créer un linkerscript ld qui conserve les symboles s'ils ne sont pas référencés.Pourquoi ld KEEP() ne conserve pas mes symboles?

Existe-t-il des conditions préalables pour que cela fonctionne?

Répondre

1

GARDE fait conserve mes symboles, mais les archives présentées ont été dépouillées à l'avance de tous les fichiers objets jugés inutiles. Pour éviter cela, l'option --whole-archive doit être utilisée dans la commande link.

De la page de manuel de ld:

--whole-archive 
     For each archive mentioned on the command line after the 
     --whole-archive option, include every object file in the archive in 
     the link, rather than searching the archive for the required object 
     files. This is normally used to turn an archive file into a shared 
     library, forcing every object to be included in the resulting 
     shared library. This option may be used more than once. 

     Two notes when using this option from gcc: First, gcc doesn't know 
     about this option, so you have to use -Wl,-whole-archive. Second, 
     don't forget to use -Wl,-no-whole-archive after your list of 
     archives, because gcc will add its own list of archives to your 
     link and you may not want this flag to affect those as well. 
Questions connexes