生成可执行文件时找不到文件,但在eclipse c 中运行正常

`File not found` when generating executable but runs ok in Eclipse C++

本文关键字:eclipse 运行 但在 可执行文件 找不到 文件      更新时间:2023-10-16

我正在尝试为我一直在研究的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 开发的新手。


更新

将所有库将所有库复制到目录中,用./...表示法引用标题,然后尝试创建可执行文件,我遇到了另一个错误。

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

会更舒适