XCode 包含系统文件而不是本地文件

XCode include system file instead of local file

我正在处理一个 iOS 项目,并使用

在我的一个文件中包含 ifaddrs.h
#include <ifaddrs.h>

最近,我的代码停止工作(特别是 getifaddrs),我注意到 BLWebSocketsServer 提供了一个 getifaddrs.h/.c,这似乎会导致问题。如果我从 XCodes "Headers" 和 "Compile Sources" 阶段删除这两个文件,我的代码将再次开始工作。

现在,我的问题是:

  1. 为什么会这样? getifaddrs.h 不是 <ifaddrs.h>,所以这应该不会影响我的代码,对吗?

  2. 有没有办法在不改变 BLWebSocketsServer 的情况下解决这个问题?

谢谢!

查看 BLWebSocketsServer 中的 getifaddrs.[hc],他们正在重新定义 getifaddrs,因此系统实现被覆盖(#include 基本上无关紧要)

看来您可以通过在编译器命令行(或 Xcode 项目设置的选项中)定义 HAVE_GETIFADDRS=1 来解决这个问题

定义 HAVE_GETIFADDRS 在某种程度上相当于从编译阶段删除文件,但有一个额外的好处,即 BLWebSocketsServer 中的其他来源不会使用可能无效的 getifaddrs 相关调用和结构声明。