gcc-4.9无法编译#include“用户自定义文件”

时间:2015-07-27 05:58:57

标签: c++ gcc

我尝试使用gcc-4.9编译以下简单的c ++文件(a.cpp)。

#include <iostream>
#include <foo>

using namespace std;

int main()
{
  int x = 3;
  cout << f(x) << endl;
  return 0;
}

“foo”也是以下简单的c ++文件(删除include guard以使代码更简单)。

int f(int ret){
    return ret + 1;
}

我无法使用gcc-4.9编译a.cpp,因为编译器说:

a.cpp:2:15: fatal error: foo: No such file or directory

我认为导致编译错误是因为用户定义的文件包含在标准头文件中(括号括起来,“&lt; ***&gt;”)。

之前,我看到同样的错误,并且知道两种方法来解决这些编译错误。

首先是将编译器gcc-4.9更改为gcc-5.0。

第二个正在取代

#include <foo>

#include "foo"

虽然我不知道为什么编译错误是通过这些方法解决的,但我从现在开始这样做。

但是现在,我看到了第二种方法无法解决的代码。 它包含许多用户定义的文件作为许多头文件中的标准文件。因此,通过第二种方法,我们必须编辑许多头文件。

它也是通过第一种方法解决的,但我现在想用gcc-4.9编译。 我想如果有一种方法可以通过gcc-4.9编译“a.cpp”而不进行编辑,则可以用相同的方法编译代码。

如何在不编辑的情况下编译gcc-4.9的“a.cpp”。为什么我可以用gcc-5.0编译“a.cpp”?

3 个答案:

答案 0 :(得分:2)

#include "file"将在与包含它的文件相同的目录中查找file#include <file>仅依赖于包含路径,因此您需要在编译命令行上-I.(或者不管路径是什么)。

答案 1 :(得分:0)

#include <foo>#include "foo"并不是一回事。

首先只在标准位置查找foo文件,而后者在当前目录中查找,然后在标准位置查找。{p>这就是您应该将#include "foo"用于本地包含文件而从不 #include <foo>的原因。

标准位置列表可使用-I选项进行配置:gcc -I/path/to/include/dir -other_options source.c -o executable。如果使用linux获取更多详细信息,请选择man gcc或info gcc。

即使-I.选项允许您始终使用#include <foo>,如果您希望其他人可以阅读您的代码,请不要这样做。

答案 2 :(得分:0)

哪些文件包含找不到? 我在猜一个子目录。

在这种情况下,答案是将子目录添加到搜索路径或将include更改为

#include "subdirectory/name_of_file"