2016-12-11 2 views
0

Я пытаюсь создать исполняемый файл для C++ сценария я работал на, но я бегу в ошибку,`Файл не found` при генерации исполняемого файла, но работает нормально в Eclipse, C++

ParameterTest.cpp:3:10: fatal error: 
'3.04.01_2/include/tesseract/baseapi.h' file not found 
#include <3.04.01_2/include/tesseract/baseapi.h> 

Это странно, потому что я могу запустить скрипт в Eclipse.

Что я делаю.

  1. Сохранить и построить проект в Eclipse, C++
  2. g++ ParameterTest.cpp -o output.bin в командной строке

генерируя output.bin исполняемый файл прекрасно работает, когда я останавливаюсь в том числе библиотек.

Может ли это иметь отношение к расположению файлов заголовков или библиотек?

Есть ли у кого-нибудь еще опыт с этой ошибкой?

Я довольно новичок в разработке на C++.


UPDATE

После копирования всех библиотек в каталог, ссылки на заголовки с ./... нотации, а затем пытается создать исполняемый файл, я бегу в другую ошибку.

Undefined symbols for architecture x86_64: 
    "tesseract::TessBaseAPI::GetUTF8Text()", referenced from: 
     _main in ParameterTest-a6efcb.o 
    "tesseract::TessBaseAPI::End()", referenced from: 
     _main in ParameterTest-a6efcb.o 
    "tesseract::TessBaseAPI::Init(char const*, char const*, tesseract::OcrEngineMode, char**, int, GenericVector<STRING> const*, GenericVector<STRING> const*, bool)", referenced from: 
     tesseract::TessBaseAPI::Init(char const*, char const*) in ParameterTest-a6efcb.o 
    "tesseract::TessBaseAPI::SetImage(Pix*)", referenced from: 
     _main in ParameterTest-a6efcb.o 
    "tesseract::TessBaseAPI::TessBaseAPI()", referenced from: 
     _main in ParameterTest-a6efcb.o 
    "_pixDestroy", referenced from: 
     _main in ParameterTest-a6efcb.o 
    "_pixRead", referenced from: 
     _main in ParameterTest-a6efcb.o 
ld: symbol(s) not found for architecture x86_64 

Я подозреваю, что это связано с подключением динамической библиотеки.

+0

Я предполагаю, что Eclipse знает, где baseapi.h хранится, но ваш sys tem doesntt - переменная пути не включает файл – bpgeck

ответ

1

Сначала попробуйте обходной путь с " " вместо < >. Клеммы < > обычно используются для заголовков системы, а " " используются для заголовков в рабочем каталоге. См Difference between angle bracket < > and double quotes " " while including header files in C++?

Если не работает, попробуйте перейти baseapi.h в том же месте, ParameterTest.cpp и изменение включают в

#include "baseapi.h" 

, если это возможно.

UPDATE:

В вашем дереве каталогов, вы должны увидеть что-то вроде этого:

/src 
| - ParameterTest.cpp 
| - baseapi.h 

После удалось скомпилировать код, используя г ++ компилятор, и вы хотите, чтобы переместить файл заголовка в подкаталог «подкаталог «:

/src 
| - ParameterTest.cpp 
| /subdir 
| | - baseapi.h 

изменение включаемых в:

#include "./subdir/baseapi.h" 

Если вы хотите, чтобы переместить заголовок в каталог в том же уровне, что и ЦСИ:

/src 
| - ParameterTest.cpp 
/include 
| - baseapi.h 

изменения включаемых в:

#include "../include/baseapi.h" 

Через некоторое время, когда ваш проект становится больше, вы можете получить скучно с изменением пути заголовка в каждом исходном файле только для перемещения одного заголовка в другой каталог, и будет удобнее создавать Makefile

+0

Считается ли хорошей практикой копирование всех необходимых заголовков, '.h' файлов в каталог' src'? –

+0

нет, но это поможет найти причину, по которой код не может скомпилироваться. Когда я делаю небольшой проект только с одним .cpp и .hpp, я держу их в одном месте, чтобы легко компилировать и отлаживать код. Для больших проектов я держу источники, заголовки, библиотеки и выходы в отдельных каталогах и создаю Makefile. Но если вы используете IDE, он делает это за вас. – Sebastian

+0

Спасибо. Это было полезно, но я все еще застреваю, поэтому я думаю, что начну экспериментировать с 'cmake', если я не смогу пройти здесь, делая это. –

 Смежные вопросы

  • Нет связанных вопросов^_^