我正在研究一个iOS项目,并在其中一个文件中使用ifaddrs.h

#include <ifaddrs.h>


最近,我的代码停止工作(尤其是getifaddrs),并且我注意到BLWebSocketsServer提供了一个getifaddrs.h/.c似乎引起问题。如果我从XCodes“标题”和“编译源”阶段删除了这两个文件,我的代码将再次开始工作。

现在,对于我的问题:


为什么会这样? getifaddrs.h不是<ifaddrs.h>,所以这应该影响我的代码,对吗?
有没有一种解决方法,而无需更改BLWebSocketsServer?


谢谢!

最佳答案

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

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

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

08-16 09:50