我试图为我一直在处理但遇到错误的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中很好地运行脚本。
我在做什么。
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
我怀疑这与动态库链接有关。
发布于 2016-12-10 16:30:04
首先,使用" "
而不是< >
来尝试使用周围的路径。< >
括号通常用于系统标头," "
引号用于工作目录中的标头。请参阅Difference between angle bracket < > and double quotes " " while including header files in C++?
如果无法工作,请尝试将same api.h移动到与ParameterTest.cpp相同的位置,并将包含更改为
#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会更舒服一些。
https://stackoverflow.com/questions/41081686
复制