我正在尝试为我一直在研究的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内部运行脚本。
我在做什么。
- 在Eclipse C 中保存和构建项目
-
g++ ParameterTest.cpp -o output.bin
在命令行
生成output.bin
可执行文件也可以正常工作,当我停止包括库。
这可能与标题文件或库的位置有关?
其他人有这个错误的经验吗?
我是C 开发的新手。
更新
将所有库将所有库复制到目录中,用./...
表示法引用标题,然后尝试创建可执行文件,我遇到了另一个错误。
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
我怀疑这与动态库链接有关。
首先使用" "
而不是< >
尝试周围路径。< >
括号通常用于系统标头," "
引号用于工作目录中的标头。请参阅Angle Bracket&Lt之间的差异;&gt;和双引号"&quot在C 中包括标头文件?
如果不起作用,请尝试将baseapi.h移动到与parametertest.cpp相同的位置,然后将您的include更改为
#include "baseapi.h"
如果可能的话。
更新:
在您的目录树中,您应该看到这样的东西:
/src
| - ParameterTest.cpp
| - baseapi.h
在设法使用G 编译器编译代码后,您想将标题文件移至子目录" subdir":
/src
| - ParameterTest.cpp
| /subdir
| | - baseapi.h
将您的包含更改为:
#include "./subdir/baseapi.h"
如果您想将标题移至与SRC相同级别的目录:
/src
| - ParameterTest.cpp
/include
| - baseapi.h
将您的包含更改为:
#include "../include/baseapi.h"
一段时间后,当您的项目变得更大时,您可能会对每个源文件中更改标头路径感到无聊,只是将一个标头移至另一个目录,而创建makefile