Linux, C ++, разделяемая библиотека: создание разделяемой библиотеки с использованием Tesseract - PullRequest
0 голосов
/ 10 октября 2018

Я хочу создать общий объект / общую библиотеку для последующего использования исполняемым файлом.

У меня есть каталог со своими *.cpp и соответствующими *.h файлами.Все файлы находятся в том же каталоге, что и мой makefile (-I.):

#makefile to create shared library w/o executable from own headers and tesseract

CC = g++

INCL = -I. -I/usr/include/tesseract/ -I/usr/include/leptonica/

CFLAGS= -Wall -g -c -fPIC

LDFLAGS = -shared


LIBS = libtesseract.a liblept.a

RM = rm -f

TARGET_LIB = libTargetLib.so

SRCS = *.cpp
OBJS = $(SRCS:.cpp=.o)

.PHONY: all
all: ${TARGET_LIB}

$(TARGET_LIB): $(OBJS)
        $(CC) $(LDFLAGS) $(INCL) -Wl,-rpath=/usr/lib/x86_64-linux-gnu/ -o $(TARGET_LIB) $^ -L/usr/lib/x86_64-linux-gnu/ -llept -ltesseract

$(OBJS): $(SRCS)
        $(CC) $(CFLAGS) $(SRCS)

Библиотечные файлы, которые нужно связать, libtesseract.a и liblept.a находятся в папке /usr/lib/x86_64-linux-gnuЯ дважды проверил.

Мне известна эта проблема: неоднозначный символ Файл: tesscallback.h , поэтому я также закомментировал соответствующие строки.

Когда я запускаю make, я получаю эту ошибку (тонны строк больше):

В файле, включенном в /usr/include/tesseract/baseapi.h:34:0, из file1.h: 16, из file1.cpp: 4: /usr/include/tesseract/tesscallback.h:296:12: ошибка: ожидаемый спецификатор вложенного имени перед именем «remove_reference».^ ~~~~~~~~~~~~~~~ /usr/include/tesseract/tesscallback.h:296:12: ошибка: ожидается ';'в конце объявления члена /usr/include/tesseract/tesscallback.h:296:28: ошибка: ожидаемый неквалифицированный идентификатор перед именем <<'имя типа токена remove_reference :: type p1_;^ /usr/include/tesseract/tesscallback.h: в конструкторе '_ConstTessMemberResultCallback_1_0 :: _ ConstTessMemberResultCallback_1_0 (const T *, _ConstTessMemberResultCallback_1_0 :: MemberSignature, P0: error_1: 0): 0)::В классе '_ConstTessMemberResultCallback_1_0' нет ни одного поля с именем 'p1_' member_ (member), p1_ (p1) {} ^ ~~ /usr/include/tesseract/tesscallback.h: в функции-члене 'virtual R _ConstTessMemberResultCallback_1_0 :: Run ()': /usr/include/tesseract/tesscallback.h:305:38: ошибка:' p1_ 'не было объявлено в этой области R result = (object _-> * member _) (p1_);^ ~~ /usr/include/tesseract/tesscallback.h:308:38: ошибка: 'p1_' не было объявлено в этой области R result = (object _-> member _) (p1_);^ ~~ /usr/include/tesseract/tesscallback.h: в глобальном масштабе: /usr/include/tesseract/tesscallback.h:326:12: ошибка: ожидается спецификатор вложенного имени перед именем удаления remove_referencep1_;^ ~~~~~~~~~~~~~~~ /usr/include/tesseract/tesscallback.h:326:12: ошибка: ожидается ';'в конце объявления члена /usr/include/tesseract/tesscallback.h:326:28: ошибка: ожидаемый неквалифицированный идентификатор перед именем <<'имя типа токена remove_reference :: type p1_;^ /usr/include/tesseract/tesscallback.h: в конструкторе '_ConstTessMemberResultCallback_1_0 :: _ ConstTessMemberResultCallback_1_0 (const T </em>, _ConstTessMemberResultCallback_1_0 :: MemberSignback: 1: 33) :1ошибка: класс '_ConstTessMemberResultCallback_1_0' не имеет никакого поля с именем 'p1_' member_ (member), p1_ (p1) {} ^ ~~ /usr/include/tesseract/tesscallback.h: в функции-члене 'virtual void _ConstTessMemberResultCallback_1_0 ::() ': /usr/include/tesseract/tesscallback.h:335:27: ошибка:' p1_ 'не было объявлено в этой области (объект _-> * member _) (p1_);^ ~~ /usr/include/tesseract/tesscallback.h:337:27: ошибка: 'p1_' не было объявлено в этой области (объект _-> * member _) (p1 _);

КогдаЯ не комментирую это (то есть строки все еще там), я получаю:

В файле, включенном из /usr/include/tesseract/baseapi.h:34:0, из process_houghlines.h:18, из process_houghlines.cpp: 3: /usr/include/tesseract/tesscallback.h:278:29: error: 'remove_reference' не является шаблоном шаблона класса struct remove_reference {typedef T type;};^ ~~~~~~~~~~~~~~~ / usr / include / tesseract / tesscallback.h: 278: 29: ошибка: переопределение 'struct remove_reference' /usr/include/tesseract/tesscallback.h:277:29: примечание: предыдущее определение шаблона 'struct remove_reference' struct remove_reference {typedef T type;};^ ~~~~~~~~~~~~~~~ /usr/include/tesseract/tesscallback.h:296:12: ошибка: ожидание спецификатора вложенного имени перед именем «remove_reference» typename remove_reference :: type p1_;^ ~~~~~~~~~~~~~~~ /usr/include/tesseract/tesscallback.h:296:12: ошибка: ожидается ';'в конце объявления члена /usr/include/tesseract/tesscallback.h:296:28: ошибка: ожидаемый неквалифицированный идентификатор перед именем <<'имя типа токена remove_reference :: type p1_;^ /usr/include/tesseract/tesscallback.h: в конструкторе '_ConstTessMemberResultCallback_1_0 :: _ ConstTessMemberResultCallback_1_0 (const T *, _ConstTessMemberResultCallback_1_0 :: MemberSignature, P0: error_1: 0): 0)::класс '_ConstTessMemberResultCallback_1_0' не имеет никакого поля с именем 'p1' member_ (member), p1_ (p1) {} ^ ~~ /usr/include/tesseract/tesscallback.h: в функции-члене 'virtual R _ConstTessMemberResultCallback_1_0 :: Run ()': /usr/include/tesseract/tesscallback.h:305:38: ошибка:' p1_ 'не было объявлено в этой области R result = (object _-> * member _) (p1_);^ ~~ /usr/include/tesseract/tesscallback.h:308:38: ошибка: 'p1_' не было объявлено в этой области R result = (object _-> member _) (p1_);^ ~~ /usr/include/tesseract/tesscallback.h: в глобальном масштабе: /usr/include/tesseract/tesscallback.h:326:12: ошибка: ожидается спецификатор вложенного имени перед именем удаления remove_referencep1_;^ ~~~~~~~~~~~~~~~ /usr/include/tesseract/tesscallback.h:326:12: ошибка: ожидается ';'в конце объявления члена /usr/include/tesseract/tesscallback.h:326:28: ошибка: ожидаемый неквалифицированный идентификатор перед именем <<'имя типа токена remove_reference :: type p1_;^ /usr/include/tesseract/tesscallback.h: в конструкторе '_ConstTessMemberResultCallback_1_0 :: _ ConstTessMemberResultCallback_1_0 (const T </em>, _ConstTessMemberResultCallback_1_0 :: MemberSignback: 1: 33) :1ошибка: класс '_ConstTessMemberResultCallback_1_0' не имеет никакого поля с именем ... (повторяющаяся ошибка)

Файлы file1.h и file1.cpp:

...
#include <tesseract/baseapi.h>
#include <leptonica/allheaders.h> 
...

и

...
#include "file1.h"
...

Файлы file2.h и file2.cpp:

...
#include <tesseract/baseapi.h>
#include <leptonica/allheaders.h> 
...

и

...
#include "file2.h"
...

Я даже не понимаю, почему ошибки различаются, поскольку заголовкиПо мере использования Тессеракт просто равен и один раз ошибка возникает в одном, чем в другом файле.

Большое спасибо за любую помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...