Компилировать Тессеракт OCR в C - PullRequest
0 голосов
/ 28 апреля 2018

Можно ли скомпилировать Tesseract ORC как чистый C, не связывая стандартную библиотеку C ++?

Я скомпилировал Tesseract , следуя приведенным здесь инструкциям , который работал нормально. Но когда я связал его с программой sample c из документа , он дал мне следующие ошибки:

  "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 без стандартной поддержки lib.

Вот мой make-файл (И нет, ответ не превращать 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

1 Ответ

0 голосов
/ 28 апреля 2018

Как правило, приложения C ++ требуют / зависят от стандартной библиотеки C ++ несколькими способами. Поэтому вы должны либо предоставить зависимость, либо, если вы действительно хотите ее избежать, статически связать ее. Кроме того, избегайте статического связывания несколько раз со стандартной библиотекой (если этого требуют несколько ваших зависимостей, основанных на C ++).

Сказав это, ваша следующая цель полностью отказаться от стандартной библиотеки C ++ намного сложнее. Вам нужно будет не только предоставить альтернативные реализации стандартных типов и функций C ++, которые, по-видимому, использует Tesseract (или модифицировать библиотеку, чтобы избежать их использования); но вам придется иметь дело с несколькими другими проблемами: исключения, RTTI, код запуска и конструкторы, вызовы специальных функций, сгенерированных компилятором, таких как memcpy, ссылки на libgcc ...

...