1) je ne sais pas pourquoi j'avais besoin de cela pour une fonction. Peut-être que quelqu'un d'autre peut intervenir.
2) L'éditeur de liens détermine ce qu'en passant par tous les fichiers objets et de vérifier les symboles à l'intérieur de chaque fichier de l'objet. Je suppose qu'en fonction de votre éditeur de liens, la recherche exacte peut varier.
Pour GNU binutils' ld tous les fichiers et bibliothèques d'objets qui apparaissent dans l'éditeur de liens de ligne de commande après l'objet contenant le symbole manquant sont recherchés à partir de la gauche vers la droite et le premier symbole est repris.
Exemple 1:
- un.o -- utilise foo(), bar()
- liba -- offre bar()
- libb -- fournit des foo()
$> ld a.o -la-lb
le résultat sera une.o en cours de recherche pour les symboles non définis. Par la suite, ld passera par le syndicat de gauche à droite à la recherche de ces symboles et de trouver les bar dans liba et toto dans libb.
Cela peut conduire à des problèmes étranges sur les dépendances circulaires:
Exemple 2:
- un.o -- utilise bar()
- liba -- offre bar(), utilise foo()
- libb -- fournit des foo(), utilise la barre()
Maintenant, il y a une dépendance circulaire entre liba et libb et la liaison ne fonctionne pas:
$> ld a.o -la-lb
parce que lors de la recherche à travers les symboles non définis dans libb, ld permettra de déterminer qu'il n'existe pas d'autres lib pour le droit de lb qui fournit ce symbole. Ce peut être fixé de deux façons au moins:
1) lien liba deux fois:
$> ld a.o -la-lb -la
2) utiliser ld la fonctionnalité de regroupement
$> ld a.o --start-groupe -de-la-lb-fin-groupe
Dans le cas 2), le groupement raconte ld à la recherche par le biais de tous les symboles de toutes les libs appartenant à ce groupe.