2010-10-15 18 views
2

Est-il possible de lier conditionnellement (comme un if..else) en utilisant le fichier de commande de l'éditeur de liens? Supposons que j'ai deux deux conditions et que j'ai besoin de lier deux sections différentes en vérifiant cette condition dans le fichier de commande de l'éditeur de liens lors de la liaison? J'utilise un éditeur de liens personnalisé (StarColor - une saveur de gcc) de Freescale.Liaison conditionnelle de sections dans un programme à l'aide d'une entrée de fichier de commande de lieur vers un éditeur de liens?

__Kanu

+1

Est-ce quelque chose que vous pourriez résoudre plus facilement avec votre système de construction (par exemple votre fichier makefile)? –

+0

Je n'utilise pas l'idée de guerrier de code et ne fais pas de mécanisme de moteur! –

+0

Juste votre système de construction semble * tellement * personnalisé, que faire une personnalisation de plus n'est pas une grosse affaire ... –

Répondre

1

Je ne sais pas exactement comment différent ou similaire votre éditeur de liens personnalisé est à l'éditeur de liens GNU ld, mais vous dites que votre toolchain est similaire ou basé sur GCC. GNU ld vous permet de spécifier un script d'éditeur de liens sur la ligne de commande en utilisant --script=scriptfile ou une option similaire. Les scripts ld peuvent INCLUDE autres fichiers de script (ou fragments de script). Ainsi, vous pouvez mettre vos trucs communs dans common.link.config (par exemple) et ont deux scripts de configuration éditeur de liens distincts qui ressemblent à ce qui suit:

/* option1.link.config */ 

INCLUDE common.link.config 

/* stuff specific to option1 follows */ 

... 

Sans surprise, le script pour l'option 2 pourrait ressembler à:

/* option2.link.config */ 

INCLUDE common.link.config 

/* stuff specific to option2 follows */ 

... 

Ensuite, au lieu de passer une 'condition' via la ligne de commande de l'éditeur de liens, spécifiez option1.link.config ou option2.link.config comme script de configuration de l'éditeur de liens. Si vous n'utilisez pas de script parce que l'éditeur de liens de la chaîne contient un script par défaut approprié, vous pouvez vider ce script par défaut en utilisant ld -verbose et le modifier comme point de départ pour vos scripts personnalisés.