我正在制作一款需要访问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)
答案 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如下:
这取决于您可以在同一存储库中轻松找到的其他2个包含文件。其他Android版本的源代码中也有其他ifaddrs.h
实现,但是它们不仅是标头,因此它们的集成还需要一个额外的步骤。
我用4种设备(Android 5.0、6.0、7.0和9.0)测试了Gingerbread的实现,但没有任何问题。