编译SDL for android时找不到ifaddrs.h头文件

时间:2014-10-20 23:02:40

标签: android c++ macos include sdl

我正在制作一款需要访问ifaddrs.h的SDL安卓游戏。当我为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 vs for mac编译时,为什么包含行为会有所不同? (在mac上使用ndkbuild或g ++)?我怎样才能让它在Android上运行?我错过了什么知识/信息才能感受到这一切?

(注意 - 目前正在运行OSX优胜美地,10.10)

2 个答案:

答案 0 :(得分:8)

您无法使用适用于Android的MacOSX。不同的平台,不同的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上所期望的那样工作。

答案 1 :(得分:0)

从Android API级别24(Android 7.0牛轧糖)ifaddrs.h开始正式受支持,因此,如果您以此SDK为目标,就不再需要自定义实现。

如果您定位到较旧的版本,则Google提供了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

这取决于您可以在同一存储库中轻松找到的其他2个包含文件。其他Android版本的源代码中也有其他ifaddrs.h实现,但是它们不仅是标头,因此它们的集成还需要一个额外的步骤。

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