首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >gcc / g ++中出现错误 “No such file or directory”应该怎么解决?

gcc / g ++中出现错误 “No such file or directory”应该怎么解决?
EN

Stack Overflow用户
提问于 2018-05-14 09:53:53
回答 1查看 0关注 0票数 0

g++ 给我错误的形式:

代码语言:javascript
复制
foo.cc:<line>:<column>: fatal error: <bar>: No such file or directory
compilation terminated.

在编译C程序时是一样的。

为什么?

EN

回答 1

Stack Overflow用户

发布于 2018-05-14 19:33:37

编译器只是试图编译名为的文件foo.cc。在命中行号时line,编译器发现:

代码语言:javascript
复制
#include "bar"

要么

代码语言:javascript
复制
#include <bar>

编译器然后尝试找到该文件。为此,它使用一组目录来查看,但在该组中,没有文件bar

如何告诉编译器在哪里找到它

g++有一个选项-I。它允许将包含搜索路径添加到命令行。假设文件bar位于名为的文件夹中frobnicate,相对于foo.cc(假设正在从所在目录编译foo.cc):

代码语言:javascript
复制
g++ -Ifrobnicate foo.cc

可以添加更多包含路径; 你给的每一个都是相对于当前目录。微软的编译器有一个相关的选项/I,或者在Visual Studio中,可以在配置属性 - > C / C ++ - >常规 - >其他包含目录下,在项目的属性页面中设置文件夹。

现在假设你有bar不同文件夹中的多个版本,因为:

代码语言:javascript
复制
// A/bar
#include<string>
std::string which() { return "A/bar"; }
代码语言:javascript
复制
// B/bar
#include<string>
std::string which() { return "B/bar"; }
代码语言:javascript
复制
// C/bar
#include<string>
std::string which() { return "C/bar"; }
代码语言:javascript
复制
// foo.cc
#include "bar"
#include <iostream>

int main () {
    std::cout << which() << std::endl;
}

最重要的#include "bar"是最左边的:

代码语言:javascript
复制
$ g++ -IA -IB -IC foo.cc
$ ./a.out
A/bar

正如你看到的,当编译器开始寻找通过A/B/并且C/,它停在第一个或最左边打。

这两种形式都是如此,include <>而且incude ""

#include <bar>#include "bar"之间的区别

通常,#include <xxx>它首先会查看系统文件夹,#include "xxx"使其首先查看当前或自定义文件夹。

例如:

想象一下项目文件夹中有以下文件:

代码语言:javascript
复制
list
main.cc

main.cc

代码语言:javascript
复制
#include "list"
....

为此,编译器会将该文件放在list项目文件夹中,因为它当前正在编译main.cc并且list当前文件夹中有该文件。

但是main.cc

代码语言:javascript
复制
#include <list>
....

然后g++ main.cc,你的编译器会寻找到系统文件夹第一,因为<list>是一个标准的头,将#include文件命名list随你的C ++平台为标准库的一部分。

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

https://stackoverflow.com/questions/-100008467

复制
相关文章

相似问题

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