views:

305

answers:

2

I am having several problems with tessdll in Visual Studio 2008. FYI, I created this app as an MFC application, I did this just to take advantage of the simple GUI I needed. It is just straight C++ and win32 from there on out.

This builds fine as a debug release for some reason (as I have included the header files and lib files that I need, and dll resides in every directory I could put it......).

So, there is a linking problem during building a release version:

Linking...
MTGOBot.obj : error LNK2001: unresolved external symbol "__declspec
(dllimport) public: __thiscall TessDllAPI::TessDllAPI(char const
*)" (__imp_??0TessDllAPI@@QAE@PBD@Z)
MTGOBot.obj : error LNK2001: unresolved external symbol "__declspec
(dllimport) public: __thiscall TessDllAPI::~TessDllAPI(void)" (__imp_??
1TessDllAPI@@QAE@XZ)
MTGOBot.obj : error LNK2001: unresolved external symbol "__declspec
(dllimport) public: int __thiscall TessDllAPI::BeginPage(unsigned
int,unsigned int,unsigned char *,unsigned char)" (__imp_?
BeginPage@TessDllAPI@@QAEHIIPAEE@Z)
MTGOBot.obj : error LNK2001: unresolved external symbol "__declspec
(dllimport) public: struct ETEXT_STRUCT * __thiscall
TessDllAPI::Recognize_all_Words(void)" (__imp_?
Recognize_all_Words@TessDllAPI@@QAEPAUETEXT_STRUCT@@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

Also, for reference, the source to tessdll.h can be found here: http://code.google.com/p/tesseract-ocr/source/browse/trunk/tessdll.h?r=165

A few more details:

  • I debug by from the toolbar and use the integrated debugger.
  • I use Batch Build to create the release version.
+1  A: 

Without seeing the project settings, this is tough. Things to check (differences between debug and release settings):

1) Are you including the .lib in the release build?

2) Did you accidentally define the preprocessor directive for tessdll?

I'd walk through the settings, switching back-and-forth between debug and release and see what was accidentally added/forgotten.

The existence of the DLL is only required for run-time. You're not getting that far.

SAMills
How to I ensure that the lib is included in the release build? I thought that proejct -> Properties -> linker -> advanced ->aditional includes would apply to both? It seems to work for debug. A few more details Have been updated in the question.
Zombies
Just saw the comment after posting my answer. Well, no, the settings don't apply to both configurations.
gimpf
Ah, heh. Thought they did because I couldn't seem to find a settings for each build type. Hence the C++ newbie in the title :O
Zombies
so is the problem solved through comparison of configuration settings?
SAMills
+2  A: 

A first guess: You did not use the link-library for the DLL. The linker shouts about not finding some symbols, and TessDllAPI sound very much like a DLL. By default (read: on Project Settings Dialog Startup) all your project settings are specific to the build-configuration (Debug, Release), but you can select "All Configurations" from the GUI. This would explain why it works in one configuration, but not in another.

Try a

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

in the header-file, or add this library for linking in the "Release" configuration.

gimpf