0

J'ai plusieurs problèmes avec tessdll dans Visual Studio 2008. Pour info, j'ai créé cette application en tant qu'application MFC, je l'ai fait juste pour profiter de l'interface graphique simple dont j'avais besoin. Il est juste droit C++ et win32 à partir de là. Cela fonctionne bien comme une version de débogage pour une raison quelconque (comme j'ai inclus les fichiers d'en-tête et les fichiers lib dont j'ai besoin, et dll réside dans chaque répertoire que je pourrais mettre ......).C++ Débutant: Avoir toutes sortes de problèmes liant

Donc, il y a un problème qui relie la construction au cours d'une version de sortie:

Linking... 
MTGOBot.obj : error LNK2001: unresolved external symbol "__declspec 
(dllimport) public: __thiscall TessDllAPI::TessDllAPI(char const 
*)" ([email protected]@[email protected]@Z) 
MTGOBot.obj : error LNK2001: unresolved external symbol "__declspec 
(dllimport) public: __thiscall TessDllAPI::~TessDllAPI(void)" (__imp_?? 
[email protected]@[email protected]) 
MTGOBot.obj : error LNK2001: unresolved external symbol "__declspec 
(dllimport) public: int __thiscall TessDllAPI::BeginPage(unsigned 
int,unsigned int,unsigned char *,unsigned char)" (__imp_? 
[email protected]@@[email protected]) 
MTGOBot.obj : error LNK2001: unresolved external symbol "__declspec 
(dllimport) public: struct ETEXT_STRUCT * __thiscall 
TessDllAPI::Recognize_all_Words(void)" (__imp_? 
[email protected]@@[email protected]@XZ) 
C:\CPP Projects\Visual Studio 2008\Projects\MTGO SO Bot\MTGO SO Bot 
\Release\MTGO SO Bot.exe : fatal error LNK1120: 4 unresolved externals 

En outre, pour référence, la source de tessdll.h se trouve ici: http://code.google.com/p/tesseract-ocr/source/browse/trunk/tessdll.h?r=165

quelques détails :

  • Je débogue par à partir de la barre d'outils et utilise le débogueur intégré.
  • J'utilise Batch Build pour créer la version commerciale.

Répondre

1

Sans voir les paramètres du projet, c'est difficile. Choses à vérifier (différences entre les paramètres de débogage et de libération):

1) Incluez-vous le fichier .lib dans la version finale?

2) Avez-vous défini accidentellement la directive du préprocesseur pour tessdll? Je passerais en revue les paramètres, basculant entre le débogage et la libération et voir ce qui a été ajouté/oublié accidentellement.

L'existence de la DLL est uniquement requise pour l'exécution. Tu n'es pas si loin.

+0

Comment faire pour que la bibliothèque lib soit incluse dans la version finale? Je pensais que proejct -> Propriétés -> linker -> avancé -> additional s'applique aux deux? Cela semble fonctionner pour le débogage. Quelques détails de plus ont été mis à jour dans la question. – Zombies

+0

Juste vu le commentaire après avoir posté ma réponse. Eh bien, non, les paramètres ne s'appliquent pas aux deux configurations. – gimpf

+0

Ah, heh. J'ai pensé qu'ils l'ont fait parce que je n'arrivais pas à trouver de paramètres pour chaque type de construction. D'où le débutant C++ dans le titre: O – Zombies

2

Une première supposition: Vous n'avez pas utilisé la bibliothèque de liens pour la DLL. L'éditeur de liens crie de ne pas trouver de symboles, et TessDllAPI ressemble beaucoup à une DLL. Par défaut (lire: Démarrage de la boîte de dialogue Paramètres du projet), tous les paramètres de votre projet sont spécifiques à la configuration de construction (Debug, Release), mais vous pouvez sélectionner "Toutes les configurations" dans l'interface graphique. Cela expliquerait pourquoi cela fonctionne dans une configuration, mais pas dans une autre.

Essayez un

#pragma comment(lib:"tessdll") 
// (Of course you need to replace the `tessdll` with the name of the library.) 

dans le fichier d'en-tête, ou ajouter cette bibliothèque pour relier dans la configuration "Release".