2010-07-30 6 views
0

J'ai une bibliothèque qui est compilée dans VS 2005 et j'essaie de la lier avec l'un des anciens espaces de travail VC 6, tout en lisant les erreurs suivantes.Erreur de compilation lors de l'utilisation de la bibliothèque VS 2005 dans VC6

error LNK2001: unresolved external symbol _sprintf_s 
error LNK2001: unresolved external symbol _strncpy_s 
error LNK2001: unresolved external symbol _strcpy_s  
error LNK2001: unresolved external symbol _strcat_s  
error LNK2001: unresolved external symbol __time64  
unresolved external symbol __alloca_probe_16  
unresolved external symbol _main  
fatal error LNK1120: 7 unresolved externals  
Error executing link.exe. 

S'il vous plaît aidez-moi à m'en tirer avec cette erreur.

Répondre

1

Je suppose que ce qui précède est le résultat de la liaison statique de l'exécutable?

Les fonctions _s sont des fonctions «sécurisées» que Microsoft a ajoutées à la bibliothèque d'exécution pour rendre plus difficile l'écriture de code avec des dépassements de tampon. Ils ont été ajoutés après VC6 (soit dans VS.NET ou VS2003) et les fonctions ne sont pas présentes dans les bibliothèques d'exécution VC6, c'est pourquoi votre lien échoue. Les deux seules façons de contourner cela sont soit de construire l'ensemble des binaires avec VS2005 ou avec VC6. Ce dernier n'est probablement pas une bonne idée car il vous faudrait retravailler la bibliothèque pour utiliser les fonctions C standard à la place.

Il est généralement déconseillé de mélanger des versions de compilateurs dans des bibliothèques statiques et des exécutables car les bibliothèques d'exécution changent et vous vous retrouvez avec des problèmes comme ceux-ci.

Vous pouvez transformer votre bibliothèque en DLL, mais cela ouvre une autre boîte de Pandore ...

2

_strcpy_s n'est pas défini dans les bibliothèques VC6, il a été ajouté dans VS2005 (ou VS2002/2003?). Je ne pense pas qu'il y ait un moyen de contourner cela. Autant que je sache, il n'est pas habituel d'utiliser une bibliothèque d'une version antérieure du compilateur avec une ancienne version du compilateur.

Questions connexes