2010-10-26 27 views
2

Je suis un peu nouveau sur C++ dans Visual Studio, et j'essaye de compiler un projet C++ massif avec Visual Studio. J'ai parcouru et ajouté tous les fichiers source et en-tête à mon projet et également mis à jour tous les chemins d'inclusion dans les propriétés du projet.Projet C++ compilé en tant que bibliothèque statique mais pas dynamique (Visual Studio)

Si le type de projet est défini sur "Static Library (.Lib)", le projet compilera sans erreur et j'aurai un joli fichier .lib gras.

Si je remplace le projet par une «bibliothèque dynamique (.dll)» Le projet ne compile plus et échoue sur les erreurs de liaison.

Voici un exemple d'un:

Error 27 error LNK2001: unresolved external symbol "char const * __cdecl Project::toString(enum Project::compMode)" ([email protected]@@[email protected]@@Z) H:\repo.project\user\tool\component.obj tool 

Toute aide ou fond sur ce qui pourrait se produire ici?

+1

où Project :: toString est-il défini/implémenté? Avez-vous un seul projet ou y a-t-il des dépendances? –

Répondre

4

Vérifiez si vous avez défini la fonction membre suivant

char const* Project::toString(Project::compMode) 

Lorsque vous compilez une bibliothèque statique d'un symbole non résolu n'est pas une erreur, car il peut être résolu plus tard, lorsque vous établissez un lien avec un autre code.

Vous avez peut-être oublié d'ajouter un fichier .cpp à votre projet.

+0

Je l'ai fait en effet! Mais la question est, pourquoi serait-il compiler en tant que lib mais pas un DLL si j'avais des fichiers .cpp manquants? – Nick

+0

La bibliothèque statique est juste une collection de fichiers objets, elle peut contenir des symboles que vous utilisez mais que vous n'avez pas définis. D'un autre côté, les DLL et les exectutables doivent avoir tous les symboles sauf ceux avec l'attribut dllimport résolus (grosso modo). – vitaut