为android编译SDL时找不到ifaddrs.h标头
ifaddrs.h header not found when compiling SDL for android
我正在用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上所期望的一样。
- g++ 说函数不存在,即使包含正确的标头
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 在CMake中使用find_package时,是否会显式包含标头
- 错误"Could not find Boost"(缺少:上下文标头)
- 如何在标头中声明(或定义)函数的问题
- 如何避免在仅标头库中C++类/变量重定义
- C++算法标头中,为什么要使用 "!(val < *first)" ?
- C++标头错误 C2238 意外标记";"
- std::initializer_list,大括号初始化和标头
- 在 c++ 中拆分类和标头中的继承,错误
- 如何确定哪个标头调用 c++ 中的另一个标头
- 如何在生成文件中添加多个标头 (HDR) 和对象?
- 我可以在运行时重新定义在 OpenCascade/OCCT 标头中定义的 c++ 静态常量吗?
- GCC,CMake,预编译标头和维护依赖项
- VisualStudio:使用 Suse Enterprise Server 12 SP5 时,不会下载远程库标头
- 一个标头库中的错误
- 可视化 Bazel C++预编译标头实现
- 如何在 CMake 中添加预编译标头用于 Visual Studio 生成器
- 使用 GN 构建预编译标头
- 为android编译SDL时找不到ifaddrs.h标头