【问题标题】:use "-I" to define g++ include path:why it only works when I set ".../include" instead of ".../include/boost"?使用“-I”定义g++包含路径:为什么它只在我设置“.../include”而不是“.../include/boost”时才有效?
【发布时间】:2021-01-26 02:02:26
【问题描述】:

我的应用程序需要 boost 库。 /usr/lib 中有一个 boost 库,/usr/include/boost 中有一个 boost 包含,但它们正是我所需要的。所以我在家里编译了新的 boost lib,/home/js/anaconda/.../include/boost 和 /home/js/anaconda/.../lib。

要在家中使用 boost,我使用“-I/home/js/anaconda/.../include/boost”来定义包含路径,但是,它抱怨错误,因为它在“/usr/ ...“ 小路。然后我尝试使用“-I/home/js/anaconda/.../include”(父目录),它工作正常!

我的问题是 1)为什么当我指定父目录“/home/.../include”而不是“/home/.../include/boost”时它会起作用?当我使用“-I”时我应该指定的正确目录是什么?

2)当我使用“-I”指定某个目录时,这些目录是否总是在/usr目录之前的目录?

【问题讨论】:

  • 如何包含头文件?
  • @Someprogrammerdude 你好,谢谢你的回复。应用程序通过“#include”包含头文件。 !!!哇,是这个原因吗?如果我将其更改为“#include<...>”(删除“boost”),它将适用于“-I -I/home/js/anaconda/.../include/boost”?
  • 是的,这就是问题所在。头文件路径附加到搜索路径以查找文件。话虽如此,您不应该真正将 boost 添加到您的 -Isearch 路径中,因为这可能会产生冲突(来自不同库的两个头文件可能具有相同的名称)。
  • @Someprogrammerdude 明白了,谢谢!顺便说一句,如果我设置-I指向Include文件路径,编译器会不会总是在系统Include文件路径之前的-I路径中找到include文件?
  • 是的,那些用-I 添加的路径应该在“标准”路径之前。

标签: c++ boost compiler-errors


【解决方案1】:

将库的所有头文件包含到其自己的目录中是一种常见的做法(但不是强制性的)。这有几个优点:

  • 在查找头文件时,无需查看其他库的头文件。
  • 当您使用包含指令读取文件时,您可以看到属于同一个库的所有头文件,因为它们从同一个基目录开始。

当您使用 -I 预处理器标志将目录添加到包含搜索路径时,该目录可以:

  • 属于您当前的项目:如果您将文件组织在目录中,它可能会很方便。
  • 成为外部依赖项的一部分:无论是系统库还是安装在您自己目录中的依赖项。这些目录的路径以include 结尾,跟在filesystem hierarchy standard 之后。

在 boost 的特定情况下,预期用途是 -I/path-to-boost-install/include 标志,然后使用诸如 #include &lt;boost/optional/optional.hpp&gt; 之类的包含指令来使用该安装中的库之一。

最好的建议是在开始使用库之前阅读文档并查找示例。在boost的情况下,您可以阅读getting started on Unixgetting started on Windows页面:

请务必注意以下几点:

  • boost 根目录的路径(通常是 /usr/local/boost_1_75_0)在 文档和邮件列表。

  • 要在 Boost 中编译任何内容,您需要 一个目录,该目录包含 #include 路径中的 boost/ 子目录。

  • 由于 Boost 的所有头文件都具有 .hpp 扩展名,并且位于 boost 根目录的 boost/ 子目录中,因此您的 Boost #include 指令看起来像:

    #include <boost/whatever.hpp>

    #include "boost/whatever.hpp"

取决于您对使用尖括号的偏好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    • 2019-07-17
    • 1970-01-01
    • 2010-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多