是否有可能在不链接C++标准库的情况下将Tesseract ORC编译为纯C语言?
我编译了Tesseract following the instructions here,它工作得很好。但当我将它与sample c program from the docs链接时,它给出了以下错误:
"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语言?我希望最终在没有标准库支持的情况下为arm-7进行交叉编译。
这是我的makefile (不,答案不是将gcc转换为g++。我想编译成c):
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发布于 2018-04-28 22:25:31
通常,C++应用程序在几种方式上需要/依赖于C++标准库。因此,您应该提供依赖项,或者,如果您确实想要避免它,则静态链接它。此外,避免多次静态链接标准库(如果您的几个基于C++的依赖项需要的话)。
话虽如此,完全避免使用C++标准库的下一个目标要难得多。你不仅必须提供C++标准类型和函数的替代实现(或者修改库以避免使用它们),而且还必须处理其他几个问题:异常、RTTI、启动代码和构造函数、调用编译器生成的特殊函数(如memcpy )、链接到libgcc……
https://stackoverflow.com/questions/50077188
复制相似问题