为android编译SDL时找不到ifaddrs.h标头

ifaddrs.h header not found when compiling SDL for android

本文关键字:ifaddrs 标头 找不到 android 编译 SDL      更新时间:2023-10-16

我正在用SDL制作一款需要访问ifaddrs.h的android游戏。当我为mac编译时,它运行良好。当我为Android编译时,它说找不到文件。

我试着把它包括在内:

#include <ifaddrs.h>

所以我

gcc -M network.cpp

找到它所包含的文件的依赖关系,这样我就可以找到ifaddrs的绝对位置,即

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/ifaddrs.h

所以当我

#include "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/ifaddrs.h"

它找到了它,但随后在包含ifaddrs 的一些其他依赖项时出错

#include <AvailabilityInternal.h>

好的。那么,当我尝试为android编译与为mac编译时,为什么include行为不同呢?(在mac上使用ndkbuild或g++)?我怎样才能让它在android上工作?我错过了什么知识/信息来感知这一切?

(注意-当前运行OSX yosemite,10.10)

从Android API 24级(Android 7.0 Nougat)开始,官方支持ifaddrs.h,因此,如果您针对此SDK,则不再需要自定义实现。

如果你的目标是旧版本,有谷歌制作的ifaddrs.h实现,你可以在Android源代码中找到它;最有趣的是Gingerbread实现,因为它只是C++头的一个,所以你不需要将它添加到你的项目中,也不需要将其作为一个单独的库进行编译,只需将其添加到包含和使用中即可。

Android Gingerbread ifaddrs.h实现文件URL如下:

https://android.googlesource.com/platform/libcore/+/refs/heads/gingerbread-release/luni/src/main/native/ifaddrs android.h

它取决于您可以在同一存储库中轻松找到的另外两个包含文件。在其他Android发布源中也有其他ifaddrs.h实现,然而,它们不仅仅是头,因此它们的集成需要一个额外的步骤。

我用4台设备(Android 5.0、6.0、7.0和9.0)测试了Gingerbread的实现,没有任何问题。

您不能将MacOSX includes用于Android。不同的平台,不同的SDK。

Android没有自己的原生ifaddrs.h实现(因此没有getifaddrs()功能)。然而,有一个第三方实现可用:

https://github.com/kmackay/android-ifaddrs
https://github.com/morristech/android-ifaddrs
https://www.openhub.net/p/android-ifaddrs/

Android版getifaddrs()的实现,因为NDK本身并不支持它。

工作原理与您在普通Linux上所期望的一样。