Inclure du "code mort" dans un exécutable

2 réponses
Avatar
JKB
Bonjour à tous,

Pour une utilisation un peu "hors norme", j'ai besoin d'inclure du
code mort dans un exécutable statique (imposé par cahier des
charges pour un certain nombre de raisons).

Or cet exécutable peut charger des extensions qui sont des
bibliothèques partagées.

L'application en question se compose d'un certain nombres de
fonctions "utiles" au programme principal et d'un certain nombre de
fonctions qui ne sont jamais utilisées par le programme principal
mais seulement par ces "extensions". Toutes ces fonctions sont
exportées par le programme principal vers les extensions
(-rexport-dynamic). Je ne sais pas si je suis très clair.

Mon problème est le suivant : l'outil est lié statiquement avec
OpenMotif, mais à l'édition des liens, seules les fonctions
réellements utilisées par l'application sont liées statiquement. Les
autres sont ignorées. Comment faire pour forcer l'inclusion de toutes
les fonctions d'OpenMotif dans mon exécutable afin que les extensions
puissent y avoir accès ? J'utilise GNU-ld et je n'ai rien trouvé qui aille
dans ce sens.

Je précise que je ne _veux_ ni ne _peux_ lier dynamiquement
l'application avec la libXm.so.

Je suis preneur de toute idée...

Cordialement,

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr

2 réponses

Avatar
Khanh-Dang
Le lundi 26 septembre 2011, JKB a écrit :
Mon problème est le suivant : l'outil est lié statiquement avec
OpenMotif, mais à l'édition des liens, seules les fonctions
réellements utilisées par l'application sont liées statiquement. Les
autres sont ignorées. Comment faire pour forcer l'inclusion de toutes
les fonctions d'OpenMotif dans mon exécutable afin que les extensions
puissent y avoir accès ? J'utilise GNU-ld et je n'ai rien trouvé qui aille
dans ce sens.



Est-ce que l'option --whole-archive ne fait pas ce que tu veux ?
Dans la page man du GNU-ld de la debian squeeze, j'ai :


--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.
Avatar
JKB
Le 26 Sep 2011 12:50:49 GMT,
Khanh-Dang écrivait :
Le lundi 26 septembre 2011, JKB a écrit :
Mon problème est le suivant : l'outil est lié statiquement avec
OpenMotif, mais à l'édition des liens, seules les fonctions
réellements utilisées par l'application sont liées statiquement. Les
autres sont ignorées. Comment faire pour forcer l'inclusion de toutes
les fonctions d'OpenMotif dans mon exécutable afin que les extensions
puissent y avoir accès ? J'utilise GNU-ld et je n'ai rien trouvé qui aille
dans ce sens.



Est-ce que l'option --whole-archive ne fait pas ce que tu veux ?
Dans la page man du GNU-ld de la debian squeeze, j'ai :


--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.



Groumphfff... C'est exactement ce que je cherche. Pourtant, j'ai lu
et relu cette page man depuis la semaine dernière sans trouver ce
que je cherchais...

Merci,

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr