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

Phi*_*ldo 5 c++ macos android sdl include

我正在制作一款需要访问ifaddrs.h的SDL安卓游戏.当我为mac编译时,它工作正常.当我为Android编译时,它说找不到文件.

我试图像这样包含它:

#include <ifaddrs.h>
Run Code Online (Sandbox Code Playgroud)

所以我

gcc -M network.cpp
Run Code Online (Sandbox Code Playgroud)

找到它所包含的文件的依赖项,所以我可以找到ifaddrs的绝对位置,即

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/ifaddrs.h
Run Code Online (Sandbox Code Playgroud)

所以,当我

#include "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/ifaddrs.h"
Run Code Online (Sandbox Code Playgroud)

它找到它,但然后错误包括ifaddrs的一些其他依赖

#include <AvailabilityInternal.h>
Run Code Online (Sandbox Code Playgroud)

好.那么,当我尝试为android vs for mac编译时,为什么包含行为会有所不同?(在mac上使用ndkbuild或g ++)?我怎样才能让它在Android上运行?我想念的是什么知识/信息?

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

Rem*_*eau 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上所期望的那样工作.


Vit*_*lii 6

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

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

Android Gingerbreadifaddrs.h实现文件 URL 如下:

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

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

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