【问题标题】:Undefined reference error in C++/QtC++/Qt 中未定义的引用错误
【发布时间】:2015-06-25 04:39:57
【问题描述】:

我正在尝试将 Tesseract OCR 库包含到我的 Qt 项目中。我已经按照说明做了所有事情,但它不起作用。

tesseract::TessBaseAPI *myOCR =
            new tesseract::TessBaseAPI();

错误 - 未定义引用 `tesseract::TessBaseAPI::TessBaseAPI()'

我认为这是链接问题,但我不确定。查看 .pro 文件(只有必要的代码):

unix|win32: LIBS += -L$$PWD/../../Tesseract-OCR/lib/ -llibtesseract302

INCLUDEPATH += $$PWD/../../Tesseract-OCR/include/tesseract
DEPENDPATH += $$PWD/../../Tesseract-OCR/include/tesseract

win32:!win32-g++: PRE_TARGETDEPS += $$PWD/../../Tesseract-OCR/lib/libtesseract302.lib

unix|win32: LIBS += -L$$PWD/../../Tesseract-OCR/lib/ -lliblept168

INCLUDEPATH += $$PWD/../../Tesseract-OCR/include/leptonica
DEPENDPATH += $$PWD/../../Tesseract-OCR/include/leptonica

win32:!win32-g++: PRE_TARGETDEPS += $$PWD/../../Tesseract-OCR/lib/liblept168.lib

DEFINES += _tagBLOB_DEFINED
DEFINES += USE_STD_NAMESPACE
DEFINES += WINDLLNAME=\\\"lib$$TARGET.dll\\\"
DEFINES += VERSION=\\\"$$VERSION\\\"
DEFINES -= UNICODE

INCLUDEPATH += C:/Tesseract-OCR/tesseract-ocr/api
INCLUDEPATH += C:/Tesseract-OCR/tesseract-ocr/ccmain
INCLUDEPATH += C:/Tesseract-OCR/tesseract-ocr/ccutil
INCLUDEPATH += C:/Tesseract-OCR/tesseract-ocr/ccstruct
INCLUDEPATH += C:/Tesseract-OCR/tesseract-ocr/include

LIBS += C:/Tesseract-OCR/lib/liblept168-static-mtdll.lib
LIBS += C:/Tesseract-OCR/lib/giflib416-static-mtdll.lib
LIBS += C:/Tesseract-OCR/lib/libjpeg8c-static-mtdll.lib
LIBS += C:/Tesseract-OCR/lib/libtiff394-static-mtdll.lib
LIBS += C:/Tesseract-OCR/lib/zlib125-static-mtdll.lib

TessBaseAPI 的每个函数都有相同的错误。

【问题讨论】:

  • 您要在什么操作系统上构建?对于 *nix,您不应该为库名称加上“lib”前缀。
  • 我会确保 .pro 中没有为 lib 定义“命名空间中的所有内容”(如果有的话,可能是该库是用非命名空间的名称,因此,虽然包含文件有效,但符号不匹配)
  • 库已链接,但APPRCASH有错误,与libtesseract-3.dll连接。如果我将更多 dll 添加到 .pro 文件中,则会发生另一个错误:Qt 停止程序并显示错误 -1072365566。你能帮帮我吗?

标签: c++ qt include static-libraries tesseract


【解决方案1】:

首先:“未定义的引用”表示liker找不到合适的静态库,所以看这个方向。

根据thisthisthis,Tesseract 需要 libtesseract.lib (.a) 和 liblept.lib (.a)。

我建议不要一开始就对你的 .pro 文件非常感兴趣,而只是尝试构建和运行最低限度的文件(我怀疑它只需要这两个库和可能一些 DLL)。

我还建议在 .pro 文件中指定要链接的库,如下所示:

LIBS += -L" C:/Tesseract-OCR/lib/" -llept

或者甚至更好(如果你的库被复制到你的项目文件夹中)

LIBS += -L" $$_PRO_FILE_PWD_/Tesseract-OCR/lib/" -llept

不是这样

LIBS +=  C:/Tesseract-OCR/lib/liblept.lib

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-16
    • 2019-11-23
    • 2013-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多