gpt4 book ai didi

c++ - 库尝试包含 但包含我项目中的 "string.h",如何防止?

转载 作者:搜寻专家 更新时间:2023-10-31 01:00:34 27 4
gpt4 key购买 nike

我有一个 string.h在我的项目中使用 -I 将它添加到我的标题搜索路径中(因为我使用的是 CMake 并从项目根目录而不是 string.h 所在的目录进行编译)。

该项目使用一个外部库来尝试 #include <string.h> (标准 C 头文件)在我包含的其中一个头文件中,不小心最终包含了我的 string.h (因为它位于包含 <> 的 header 搜索路径上)。

这是揭示这一点的(编辑过的)错误消息:

In file included from /path/to/project/src/random_source_file.cpp:3:
In file included from /usr/local/include/SDL2/SDL.h:67:
In file included from /usr/local/include/SDL2/SDL_main.h:25:
In file included from /usr/local/include/SDL2/SDL_stdinc.h:60:
In file included from /path/to/project/src/string.h:7:
etc.

SDL_stdinc.h 中的第 60 行有 #include <string.h> .

我该如何解决这个问题?

最佳答案

我使用的 2 条规则:

1) 我创建的包含文件始终通过相对路径包含,并且从不包含在环境 PATH 中。

#ifndef DTB_SUPPORT_HH
#include "../../bag/src/dtb_support.hh"
#endif

2) 我只通过环境 PATH 包含库文件,从不使用相对路径。

#include <string>

编辑 - 起源:

我对相对路径 include 的使用源于以下经历:

作为 MLOC 规模工作的承包商(数百名之一),我找到向简单文件添加符号的原因,我们将其命名为“Foo.hh”。

我用他们的工具找到“Foo.hh”,修改了它,并编辑了我正在处理的文件使用我放在那里的新符号。

然而,在重建期间,编译器提示该符号是未知。

所以我仔细检查了这两个文件,并意识到必须有另一个“噗噗”。

然后我启动了整个系统的构建,其中的选项导致了编译器在编译输出中报告所有文件包含在每个编译单元中(我认为是 -H?)。

起初我只参观了我感兴趣的编译单元,并找到第二个“Foo.hh”。

好奇心打败了我,所以我翻阅了编译日志,并找到了数千个包含“Foo.hh”的文件。我不得不收集这些行在一起,并用完整路径对它们进行排序。

原来有 5 条路径指向“Foo.hh”。对比一下,这5个文件是3个不同的版本。

(仅供引用 - 我从第一个文件中删除了我的符号,将新符号添加到第二个文件,并且(按方向)忽略了其他 3 个文件。)

关于c++ - 库尝试包含 <string.h> 但包含我项目中的 "string.h",如何防止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30851695/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com