Je viens de recevoir une application pour compiler et exécuter en disant à mon projet VS 2008 d'ignorer libc.lib dans la section linker-> input du menu des propriétés du projet. Avant de faire cela, VS m'a donné l'ancienne "erreur fatale LNK1104: impossible d'ouvrir le fichier 'LIBC.lib'".newbie C questions de bibliothèque d'exécution dans Visual Studio 2008
Je ne suis pas sûr de la façon dont cette application compile si j'ignore le crt, mais c'est évidemment mon ignorance qui parle.
J'ai vérifié les paramètres du projet C/C++ et le paramètre de bibliothèque d'exécution lit le dll de débogage multithread (indicateur/MDd) - donc je dois lier quelque chose à un VC80 * .dll quelque part.
Je ne sais pas trop comment. J'ai toujours été confus au sujet des paramètres crt en studio visuel, statique ou de débogage, multithread ou non. De la lecture de ce site et de google j'ai une amélioration grossière dans ma compréhension maintenant-- si vous utilisez les dlls vous n'avez pas autant de bouffées de code, les choses lien lorsque le programme a besoin d'eux, crt mises à jour peuvent être appliquées en écrasant la DLL. Les raisons habituelles pour utiliser une DLL en d'autres termes.
Mais qu'en est-il des versions multi-vs-single threaded? S'il m'arrive de créer un lien avec une version statique, je ne peux pas utiliser des threads win ou pthreads, c'est ce que cela signifie? Une autre chose dont j'ai entendu parler mais que je n'ai jamais suivie: il y a des problèmes pour allouer un objet dans une DLL et le libérer d'un autre, ou quelque chose comme ça, pour faire une allocation croisée. Je ne m'explique pas très bien (parce que je ne le comprends pas) mais j'espère que vous comprendrez ce que je veux dire et que je peux vous expliquer ce qui s'y passe. Cela signifie-t-il que dans mon programme je ne peux pas appeler new ObjectX() sur une classe qui vit dans une DLL? Je ne peux pas le dire, n'est-ce pas?
Merci à tous!
Merci pour l'explication.Cela signifie-t-il que les dll créées par différentes versions de VC++ utilisent des versions différentes de crt et peuvent donc avoir des implémentations légèrement différentes de malloc, free et delete? Donc, si mon programme, construit en VS2008, appelle new() sur votre version VS2005 de MyClass, dont la version de crt alloue la mémoire? Et quand j'appelle delete(), quelle version détruit les choses? – larryq
C'est le problème. Si vous souhaitez créer une DLL réutilisable, il est préférable de créer des fonctions C qui gèrent l'allocation et la suppression de vos classes. Au lieu d'utiliser new MyClass() et de supprimer myClassInst, il est préférable d'avoir une fonction qui fait MyClass inst = AllocateMyClass(), et DeleteMyClass (inst), donc le runtime utilisé pour la compilation gère le new/delete (ou malloc/free). –