为android编译SDL时未找到ifaddrs.h标头
我正在用SDL制作一个android游戏,需要访问ifaddrs.h。当我为mac编译时,它工作得很好。当我为Android编译时,它说找不到文件 我试图将其包括在内,如下所示:为android编译SDL时未找到ifaddrs.h标头,android,c++,macos,include,sdl,Android,C++,Macos,Include,Sdl,我正在用SDL制作一个android游戏,需要访问ifaddrs.h。当我为mac编译时,它工作得很好。当我为Android编译时,它说找不到文件 我试图将其包括在内,如下所示: #include <ifaddrs.h> 为了找到它所包含的文件的依赖关系,我可以找到IFADRS的绝对位置,即 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.
#include <ifaddrs.h>
为了找到它所包含的文件的依赖关系,我可以找到IFADRS的绝对位置,即
/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"
它找到了它,但在包含IFADRS的某些其他依赖项时出错
#include <AvailabilityInternal.h>
#包括
嗯。那么,为什么当我尝试为android和mac编译时,include行为会有所不同呢?(在mac上使用ndkbuild或g++)?我如何让它在android上工作?我缺少什么样的知识/信息才能让这一切都有意义
(注意-目前正在运行OSX yosemite,10.10)您不能在Android上使用MacOSX includes。不同的平台,不同的SDK Android没有自己的原生
ifaddrs.h
实现(因此没有getifaddrs()
函数)。但是,有一个第三方实现:
Android的GetIFADRS()实现,因为NDK本机不支持它 就像您在普通Linux上所期望的那样工作
从Android API级别24(Android 7.0 Nougat)开始,
ifadrs.h
得到官方支持,因此,如果您以该SDK为目标,就不再需要自定义实现
如果你的目标是旧版本,谷歌有ifaddrs.h
实现,你可以在Android源代码中找到它;最有趣的是姜饼实现,因为它是C++头文件,所以你不需要把它添加到你的项目中或者编译成一个单独的库,只需把它添加到你的包含中,就可以使用.<
Android Gingerbreadifaddrs.h
实现文件URL如下:
它取决于您可以在同一存储库中轻松找到的其他两个包含文件。在其他Android版本源中也有其他ifaddrs.h
实现,但是,它们不仅仅是头文件,因此它们的集成需要一个额外的步骤
我用4台设备(Android 5.0、6.0、7.0和9.0)测试了姜饼的实现,我没有遇到任何问题。oh my。非常感谢你!不知道我怎么会在搜索中没有发现。问这个问题让我觉得很傻…存储库是404'ed。Fork可用,例如在。然而,正如所示,这不是最新版本。在我的设备上,当我通过WiFi连接时,morristech存储库中的代码会出现故障。我在一些Mozilla Beta测试版存储库中找到的文件工作得更好。为了让它正常工作,我必须删除
#if defined(ANDROID)
和#endif
。ifaddr
结构缺少成员ifa_addr
和ifa_dstaddr
。如果需要,将android_getifaddrs重命名为getifaddrs
。
#include <AvailabilityInternal.h>