如何包含共享库中的头文件?

埃贾达

目前的状态是什么?

我的文件夹结构:

--home
   |---an_awesome_lib
   |    |---Core
   |         |---src
   |         |    |---header_of_lib.h
   |         |
   |         |---build
   |              |---libawesome.so
   |
   |---framework
        |---project
              |---my_program_header.h

在 my_program_header.h 我有以下行:

#include <an_awesome_lib/Core/src/header_of_lib.h>

我告诉 g++:

-I</home/an_awesome_lib/Core/src/header_of_ib.h> -lawesome -L/home/an_awesome_lib/build

问题描述

当我编写#include<home/an_awesome_lib/Core/src/header_of_lib.h>编译器时不会抛出错误。但我不想这样做。我想要…… 就像#include <an_awesome_lib/Core/src/header_of_lib.h>这是一个简单的问题,并且经常被问到。但是,我没有看到给 g++ 的路径与代码中 #include 中的路径之间的关系。

我在哪里找到了一些信息:

我在那里读过,但没有完整的解释将这一切放在一起。

#include <filename> 和 #include "filename" 有什么区别?

https://gcc.gnu.org/onlinedocs/cpp/Search-Path.html

如何在 g++ 中包含库的路径

在 C++ 中的 include 语句中使用(相对)路径快捷方式


我想要的是

我希望你有一个笼统的解释,把它放在一个上下文中。以下要点只是一些建议,可以让我更清楚地了解我想知道的内容。

  • 我什么时候需要告诉整个路径?
  • 什么时候相对路径就足够了?
  • 头文件中的路径与给定 g++ 的路径有什么关系?他们有关系吗?
  • 是否有多种解决方案,一种限制更多,一种更开放?
平均

-I指定包含目录,而不是文件。GCC 文档如下

-I dir

...

将目录dir添加到预处理时要搜索头文件的目录列表中。

使用预处理指令包含用户和系统头文件#include它有两种变体:

#include <file>

此变体用于系统头文件。它在系统目录的标准列表中搜索名为 file 的文件。您可以使用-I选项将目录添加到此列表中

...


如果你想能够写

#include <an_awesome_lib/Core/src/header_of_lib.h>

那么你应该指定/home为一个包含目录:

-I/home

但是,包括整个home目录并不是一个好主意。我建议你改变你很棒的库的目录结构。例如,您可以模仿 Boost 并在其中创建an_awesome_lib目录an_awesome_lib

an_awesome_lib
  |--- an_awesome_lib

然后使用-I/home/an_awesome_lib.

或者你可以include/an_awesome_lib在里面创建an_awesome_lib

an_awesome_lib
  |--- include
         |--- an_awesome_lib

然后使用-I/home/an_awesome_lib/include.

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章