用C语言编译Tesseract OCR 在没有连接C++标准库的情况下编译为纯C是可能的吗?

用C语言编译Tesseract OCR 在没有连接C++标准库的情况下编译为纯C是可能的吗?,c,tesseract,C,Tesseract,我编译了Tesseract,效果很好。但当我将其与链接时,它给了我以下错误: "std::__1::basic_streambuf<char, std::__1::char_traits<char> >::~basic_streambuf()", referenced from: std::__1::basic_filebuf<char, std::__1::char_traits<char> >::~basic

我编译了Tesseract,效果很好。但当我将其与链接时,它给了我以下错误:

  "std::__1::basic_streambuf<char, std::__1::char_traits<char> >::~basic_streambuf()", referenced from:
      std::__1::basic_filebuf<char, std::__1::char_traits<char> >::~basic_filebuf() in libtesseract.a(libtesseract_api_la-baseapi.o)
      std::__1::basic_filebuf<char, std::__1::char_traits<char> >::basic_filebuf() in libtesseract.a(libtesseract_api_la-baseapi.o)
  "std::__1::cin", referenced from:
      tesseract::TessBaseAPI::ProcessPagesInternal(char const*, char const*, int, tesseract::TessResultRenderer*) in libtesseract.a(libtesseract_api_la-baseapi.o)

一般来说,C++应用程序需要以多种方式依赖C++标准库。因此,您应该提供依赖关系,或者,如果您真的想避免它,则静态链接它。另外,避免静态链接几次标准库(如果C++中的几个依赖项需要它)。

已经说过,你的完全避免C++标准库的下一个目标是更加困难。不仅您必须提供TeScAct似乎使用的C++标准类型和函数的替代实现(或者修改库以避免它们的使用);但是您必须处理几个其他问题:异常、RTTI、启动代码和构造函数、对编译器生成的特殊函数的调用,如

memcpy
、链接到
libgcc

,只是为了清楚起见:您尝试的C示例是最后一个,“在C程序中使用C-API的示例”@ @ UR2525301纠正器TSSESCATE只是一个C++应用程序,不能用C++标准LIB编译成杰森@代码:ListSysActs/CODE >公开了一个C语言API,可以用C语言或其他语言调用C函数。但是,这与“代码> LBTESRESATA//CODE”依赖于其他库(在这种情况下,是C++标准库)无关。您似乎混淆了编译
libtesseract
本身的阶段与编译链接到
libtesseract
的您自己的代码的阶段。[…]@Jason[…]看看像和这样的问题,试图更好地理解这个过程。
CFLAGS = -c -Wall -I../src/api/ -I../src/ccstruct -I../src/ccutil -I../leptonica/src/ -I../leptonica/build/src

default: main

main.o: main.c
    gcc $(CFLAGS) -c main.c -o main.o

main: main.o
    gcc main.o ../leptonica/lib/nodebug/liblept.a ../src/api/.libs/libtesseract.a -o main

clean:
    -rm -f *.o
    -rm -f main