Windows编译Tesseract示例遇LNK2001错误,如何生成正确lib?
编译Tesseract C++示例时的链接器错误排查
在Windows环境下编译Tesseract的基础C++示例,从预构建包获取libtesseract-5.dll后生成了libtesseract-5.lib,但遇到以下链接器错误:
1>tessm.obj : error LNK2001: unresolved external symbol "public: void __thiscall tesseract::TessBaseAPI::End(void)" (?End@TessBaseAPI@tesseract@@QAEXXZ) 1>tessm.obj : error LNK2001: unresolved external symbol "public: char * __thiscall tesseract::TessBaseAPI::GetUTF8Text(void)" (?GetUTF8Text@TessBaseAPI@tesseract@@QAEPADXZ) 1>tessm.obj : error LNK2001: unresolved external symbol "public: void __thiscall tesseract::TessBaseAPI::SetImage(struct Pix *)" (?SetImage@TessBaseAPI@tesseract@@QAEXPAUPix@@@Z) 1>tessm.obj : error LNK2001: unresolved external symbol "public: int __thiscall tesseract::TessBaseAPI::Init(char const *,char const *,enum tesseract::OcrEngineMode,char * *,int,class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > const *,class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > const *,bool)" (?Init@TessBaseAPI@tesseract@@QAEHPBD0W4OcrEngineMode@2@PAPADHPBV?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@3_N@Z) 1>tessm.obj : error LNK2001: unresolved external symbol "public: __thiscall tesseract::TessBaseAPI::TessBaseAPI(void)" (??0TessBaseAPI@tesseract@@QAE@XZ)
已执行的解决步骤:
- 从
libtesseract-5.dll提取导出函数列表创建exports.def文件:dumpbin /exports libtesseract-5.dll > exports.def - 编辑
exports.def内容如下:LIBRARY libtesseract-5.dll EXPORTS TessAltoRendererCreate @1 TessBaseAPIAdaptToWordStr @2 TessBaseAPIAllWordConfidences @3 TessBaseAPIAnalyseLayout @4 TessBaseAPIClear @5 TessBaseAPIClearAdaptiveClassifier @6 TessBaseAPIClearPersistentCache @7 TessBaseAPICreate @8 TessBaseAPIDelete @9 - 使用
exports.def生成libtesseract-5.lib:lib /def:exports.def /OUT:libtesseract-5.lib /MACHINE:X86 - 添加
libtesseract-5.lib链接后仍出现上述错误。
测试环节:
为确认libtesseract-5.dll和libtesseract-5.lib的导出函数序号一致,生成并对比dll.txt和lib.txt,确认二者导出函数数量和名称均相同:
dumpbin /exports libtesseract-5.dll > dll.txt dumpbin /exports libtesseract-5.lib > lib.txt
使用/verbose链接选项后得到以下日志,显示已正确添加libtesseract-5.lib和libleptonica.lib:
1>Searching libraries 1> Searching ..\lib\leptonica\leptonica-1.74.0.lib: 1> Searching D:\work\Test\YR\x86\OCR\libtesseract-5.lib: 1> Searching C:\Program Files (x86)\Windows Kits\10\lib\10.0.22621.0\um\x86\kernel32.lib: 1> Searching C:\Program Files (x86)\Windows Kits\10\lib\10.0.22621.0\um\x86\user32.lib: 1> Searching C:\Program Files (x86)\Windows Kits\10\lib\10.0.22621.0\um\x86\gdi32.lib: 1> Searching C:\Program Files (x86)\Windows Kits\10\lib\10.0.22621.0\um\x86\winspool.lib: 1> Searching C:\Program Files (x86)\Windows Kits\10\lib\10.0.22621.0\um\x86\comdlg32.lib: 1> Searching C:\Program Files (x86)\Windows Kits\10\lib\10.0.22621.0\um\x86\advapi32.lib: 1> Searching C:\Program Files (x86)\Windows Kits\10\lib\10.0.22621.0\um\x86\shell32.lib: 1> Searching C:\Program Files (x86)\Windows Kits\10\lib\10.0.22621.0\um\x86\ole32.lib: 1> Searching C:\Program Files (x86)\Windows Kits\10\lib\10.0.22621.0\um\x86\oleaut32.lib: 1> Searching C:\Program Files (x86)\Windows Kits\10\lib\10.0.22621.0\um\x86\uuid.lib: 1> Searching C:\Program Files (x86)\Windows Kits\10\lib\10.0.22621.0\um\x86\odbc32.lib: 1> Searching C:\Program Files (x86)\Windows Kits\10\lib\10.0.22621.0\um\x86\odbccp32.lib: 1> Searching C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\lib\x86\msvcprt.lib: 1> Searching C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\lib\x86\MSVCRT.lib: 1> Found ___scrt_stub_for_acrt_initialize 1> Loaded MSVCRT.lib(ucrt_stubs.obj) 1> Found __filter_x86_sse2_floating_point_exception_default 1> Loaded MSVCRT.lib(x86_exception_filter.obj) 1> Searching C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\lib\x86\OLDNAMES.lib: 1> Searching C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\lib\x86\vcruntime.lib: 1> Searching C:\Program Files (x86)\Windows Kits\10\lib\10.0.22621.0\ucrt\x86\ucrt.lib: 1>Finished searching libraries
请问还需要检查或测试哪些内容才能生成正确的libtesseract-5.lib?
内容的提问来源于stack exchange,提问作者sehon song
相关产品推荐
相关产品推荐

