Question

Je travaille dans un environnement Linux avec C ++, en utilisant le compilateur GCC.

Je travaille actuellement sur la modification et la mise à niveau d'un grand corps de code préexistant. Dans ce contexte, il a été nécessaire d’ajouter un assez grand nombre de petites références dans le code dans divers endroits pour relier des éléments, ainsi que pour ajouter plusieurs nouvelles bibliothèques de code externes. Il existe également une structure assez grande et complexe de Makefiles liés à un fichier configure.ac pour gérer le processus de construction.

Au démarrage du processus de construction, tout est compilé sans problème, mais l'erreur d'erreur liée à l'éditeur de liens est de retour lorsque vous essayez d'utiliser une bibliothèque de code personnalisée que nous avons récemment ajoutée. Nous avons maintenant parcouru une grande quantité de code avec un peigne fin pour rechercher les erreurs d’orthographe, vérifier l’ordre dans lequel toutes les bibliothèques sont incluses dans le processus de construction et vérifier que les fichiers .o créés contiennent ce dont nous avons besoin à l’aide de dumps, et tous sont comme et où ils devraient être. Nous avons également testé la bibliothèque séparément et le problème n’est certainement pas là.

En bref, nous avons essayé la plupart des choses que vous devriez normalement faire dans ces scénarios.

Existe-t-il un outil pour C ++ capable de détecter automatiquement les erreurs de l'éditeur de liens, de la même manière que cppcheck ou une attelle (les deux que nous avons vains), qui pourraient aider ici?

Était-ce utile?

La solution

Je ne connais pas votre plate-forme, mais j’ai parfois passé avec des problèmes d’éditeur de liens dans gcc jusqu’à ce que j’ai réalisé que la liaison de bibliothèque statique ( .a ) nécessite un ordre spécifique, ce n’est pas la même chose que de lier objet gcc.o premier.a deuxième.a que objet gcc.o deuxième.a premier.a .

Autres conseils

FWIW (pas beaucoup) J'essaie de résoudre ce type de problème en utilisant un autre éditeur de liens car j'ai accès à plusieurs plates-formes différentes. Si vous pouvez utiliser un autre éditeur de liens, vous trouverez:

a) les liens du programme, ce qui transforme votre problème en 'pourquoi ne crée-t-il pas un lien?' à 'quelles sont les différences entre les lieurs et les liens?' ce qui n'est pas exactement un pas en avant, mais parfois un pas d'un côté vous donne une perspective différente à partir de laquelle vous pouvez voir une solution;

OU

b) la liaison échoue, auquel cas l’autre éditeur de liens peut fournir des informations plus utiles sur les raisons de son échec.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top