首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >生成可执行文件时未找到的文件,但在Eclipse C++中运行ok

生成可执行文件时未找到的文件,但在Eclipse C++中运行ok
EN

Stack Overflow用户
提问于 2016-12-11 00:10:17
回答 1查看 66关注 0票数 0

我试图为我一直在处理但遇到错误的C++脚本生成一个可执行文件,

代码语言:javascript
代码运行次数:0
运行
复制
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. 在C++中保存和构建项目
  2. 命令行中的g++ ParameterTest.cpp -o output.bin

当我停止包含库时,生成output.bin可执行文件也很好。

这是否与头文件或库的位置有关?

有没有其他人有过这个错误的经验?

我对C++开发非常陌生。

更新

在将所有库复制到目录中,使用./...符号引用标头,然后尝试创建可执行文件后,我会遇到不同的错误。

代码语言:javascript
代码运行次数:0
运行
复制
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

我怀疑这与动态库链接有关。

EN

回答 1

Stack Overflow用户

发布于 2016-12-11 00:30:04

首先,使用" "而不是< >来尝试使用周围的路径。< >括号通常用于系统标头," "引号用于工作目录中的标头。请参阅Difference between angle bracket < > and double quotes " " while including header files in C++?

如果无法工作,请尝试将same api.h移动到与ParameterTest.cpp相同的位置,并将包含更改为

代码语言:javascript
代码运行次数:0
运行
复制
#include "baseapi.h"

如果可能的话。

更新:

在目录树中,您应该看到如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
/src
| - ParameterTest.cpp
| - baseapi.h

在您成功地使用g++编译器编译代码并希望将头文件移动到子目录“subdir”之后:

代码语言:javascript
代码运行次数:0
运行
复制
/src
| - ParameterTest.cpp
| /subdir
| | - baseapi.h

将您的包含更改为:

代码语言:javascript
代码运行次数:0
运行
复制
#include "./subdir/baseapi.h"

如果要将标题移动到与src相同级别的目录:

代码语言:javascript
代码运行次数:0
运行
复制
/src
| - ParameterTest.cpp
/include
| - baseapi.h

将您的包含更改为:

代码语言:javascript
代码运行次数:0
运行
复制
#include "../include/baseapi.h"

过了一段时间,当您的项目变得更大时,您可能对更改每个源文件中的头路径感到厌烦,只会将一个头移到另一个目录,创建一个Makefile会更舒服一些。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41081686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档