erreur LNK2005: _sprintf déjà défini dans ntdll.lib (ntdll.dll)

Je suis lié à ntdll.lib pour utiliser ZwQueryInformationProcess et j’utilise la bibliothèque d’exécution multithread.

ntdll semble définir certaines fonctions crt. Ainsi, lorsque je me connecte à ce fichier et que j’utilise également la bibliothèque d’exécution, j’obtiens des erreurs de l’éditeur de liens.

Puis-je forcer l’éditeur de liens à utiliser les fonctions crt et à ignorer les symboles ntdll pour éliminer l’erreur? Ou en quelque sorte autrement résoudre cette erreur.

Je sais que la documentation de ZwQueryInformationProcess suggère un chargement dynamic, mais il est utilisé dans une bibliothèque statique à laquelle mon projet principal est également lié, et cela fonctionne correctement depuis longtemps, alors je préférerais ne pas le changer.

Merci.

J’ai trouvé quelques discussions à ce sujet sur d’autres sites, par exemple: http://www.codeguru.com/forum/archive/index.php/t-414274.html mais je n’ai rien vu qui semble fournir une bonne information. Solution. Il y a des mentions de modification de l’ordre des liens, mais je ne vois pas comment modifier l’ordre dans lequel la bibliothèque d’exécution se connecte via les parameters du projet.

Changer l’ordre des liens semble le résoudre. Pour modifier l’ordre des librairies liées automatiquement, vous devez les ignorer en les ajoutant à “Ignore Specific Library”, puis les append à “Additional Dependencies” dans l’ordre dans lequel vous souhaitez qu’elles soient liées. Le message d’erreur était le suivant:

1>libcmt.lib(wcstol.obj) : error LNK2005: _wcstoul already defined in ntdll.lib(ntdll.dll) 

J’ai donc ajouté libcmt.lib en tant qu’ignoré, et l’ai également placé au début des dépendances supplémentaires. Cela a produit une autre erreur, que j’ai suivie avec les mêmes étapes. Ainsi, les propriétés du projet ont fini par ressembler à ceci (ntdll.lib est à la fin des dépendances supplémentaires):

Capture d'écran des propriétés du projet

J’ai également trouvé utile d’append / verbose: lib au Linker -> Ligne de commande -> Options supplémentaires pour que vous puissiez voir exactement quelles bibliothèques sont liées et dans quel ordre.