gpt4 book ai didi

c++ - boost/Netbeans : Recursive Includes Related to BSD on Linux Mint 17. 2

转载 作者:行者123 更新时间:2023-11-28 00:00:56 25 4
gpt4 key购买 nike

我的 Linux Mint 17.2 机器上有一个 Netbeans 中的 C++ 项目。我正在使用 GCC 5 工具链(例如 g++ 5.3.0)、Netbeans 8.1 和 Boost 1.61.0。

我在我的项目中遇到了一个奇怪的警告,它到处都是。例如,在我的 main.cpp 中,我 #include <iostream>在最顶部,那条线会收到警告。 (我看到这个警告发生在我包含在每个文件中的第一个文件中,所以它不是 iostream 等的问题)。

警告是有一个递归的#include在 boost 。具体来说,Netbeans 提示 <boost/predef/os/bsd/free.h>包括 <boost/predef/os/bsd.h><boost/predef/os/bsd.h>包括 <boost/predef/os/bsd/free.h> .作为记录,这似乎是真的 - 有谁知道为什么在 boost 中有这个递归包含,它是否真的应该存在?

更大的问题是我的系统不是 BSD,所以我不知道为什么我会从 BSD header 中收到这些警告,这些警告不应该被包含或激活/定义。我尝试打印 BOOST_PLATFORM_CONFIG从我的 main.cpp 中,它按预期打印出 boost 的 Linux 配置 header 的路径 - 而不是 BSD 配置 header 。而且,我的程序编译并运行良好,所以我假设它实际上从未使用过 BSD header 。这意味着这些 BSD header 给我警告的事实可能是 Netbeans 问题,而不是 boost 问题。

有没有人对如何使用这些奇怪的递归包含警告缩小和解决这个问题有任何想法?

最佳答案

我遇到了同样的问题。问题在于 boost predef/os/bsd.h header 。它在 #ifndef BOOST_PREDEF_OS_BSD_H 守卫的#else block 中#includes 5 个文件。这意味着如果这 5 个文件中的任何一个还包含 bsd.h(它们包含),则此头文件无法防止递归。

我的解决方案是编辑 predef/os/bsd.h 文件并在 #else block 中添加递归保护 - 因此,从第 94 行开始,我的 predef/os/bsd.h 文件现在看起来像:

#ifndef BOOST_PREDEF_OS_BSD_H_PREVENT_RECURSION      <-- ADD THIS
#define BOOST_PREDEF_OS_BSD_H_PREVENT_RECURSION <-- ADD THIS

#include <boost/predef/os/bsd/bsdi.h>
#include <boost/predef/os/bsd/dragonfly.h>
#include <boost/predef/os/bsd/free.h>
#include <boost/predef/os/bsd/open.h>
#include <boost/predef/os/bsd/net.h>

#endif <-- ADD THIS

现在 netbeans 代码帮助很开心,我的代码仍然可以正确链接和编译。

关于c++ - boost/Netbeans : Recursive Includes Related to BSD on Linux Mint 17. 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39006863/

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