【问题标题】:gcc-4.9 cannot compile #include "user defined file"gcc-4.9 无法编译#include “用户定义文件”
【发布时间】:2015-07-27 05:58:57
【问题描述】:

我尝试使用 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保护让代码更简单)。

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

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

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

我认为编译错误是因为用户定义的文件被包含为标准头文件(放括号,“”)。

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

第一个是将编译器 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”?

【问题讨论】:

标签: c++ gcc


【解决方案1】:

#include "file" 将在与包含它的文件相同的目录中查找file#include &lt;file&gt; 仅依赖于包含路径,因此您需要在编译命令行上使用 -I.(或任何路径)。

【讨论】:

  • 最好将系统文件和本地文件分开——推荐“foo”
【解决方案2】:

#include &lt;foo&gt;#include "foo" 不是同一个东西。

First 仅在标准 位置查找foo 文件,而后者首先在当前目录中查找,然后在标准位置查找。这就是为什么您应该对本地包含文件使用 #include "foo"从不 #include &lt;foo&gt;

标准地点列表可使用-I 选项进行配置:gcc -I/path/to/include/dir -other_options source.c -o executable。只需执行 man gcc,如果使用 linux 则执行 info gcc 以获取更多详细信息。

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

【讨论】:

  • First 只在标准位置查找 foo 文件,而后者首先在当前目录中查找,然后在标准位置。 你有那个倒退。
【解决方案3】:

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

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

#include "subdirectory/name_of_file" 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 2019-10-29
    • 1970-01-01
    • 2017-06-02
    相关资源
    最近更新 更多