我在Visual Studio 2008中遇到了tessdll的几个问题。仅供参考,我将这个应用程序创建为MFC应用程序,我这样做只是为了利用我需要的简单GUI。从那里开始,它只是直接的C ++和win32。
由于某种原因(因为我已经包含了我需要的头文件和lib文件,并且dll驻留在我可以放置它的每个目录中......),这构建得很好。
因此,在构建发布版本时存在链接问题:
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
另外,作为参考,tessdll.h的源代码可以在这里找到: http://code.google.com/p/tesseract-ocr/source/browse/trunk/tessdll.h?r=165
更多细节:
答案 0 :(得分:2)
第一个猜测:您没有使用DLL的链接库。链接器大喊大叫没有找到一些符号,而TessDllAPI
听起来非常像DLL。默认情况下(读取:在项目设置对话框启动时),所有项目设置都特定于构建配置(调试,发布),但您可以从GUI中选择“所有配置”。这可以解释为什么它在一个配置中工作,而在另一个配置中不工作。
尝试
#pragma comment(lib:"tessdll")
// (Of course you need to replace the `tessdll` with the name of the library.)
在头文件中,或者在“Release”配置中添加此库以进行链接。
答案 1 :(得分:1)
如果没有看到项目设置,这很难。 要检查的事项(调试和发布设置之间的差异):
1)您是否在发布版本中包含.lib?
2)您是否意外地为tessdll定义了预处理器指令?
我会浏览设置,在调试和发布之间来回切换,看看是什么意外添加/忘记了。
只有运行时才需要DLL的存在。你没有那么远。