Sum*_*man 2 c++ android native cross-compiling android-ndk
我正在尝试根据编译标志(通过动态地将 Application.mk 的路径传递给 ndk-build 命令)来编译 Android NDK 的多个架构和多个 API 级别的源代码。一直到r12都进展顺利。现在我尝试将构建系统更新到最新的 NDK r15c,发现它从“android-ndk/sysroot/...”路径获取标头,而不是依赖于 Application.mk 文件中的 APP_PLATFORM 标志
APP_PLATFORM := android-19
Run Code Online (Sandbox Code Playgroud)
r12b NDK 的日志:
-I/data/android/android-ndk-r10d/platforms/android-19/arch-arm/usr/include
Run Code Online (Sandbox Code Playgroud)
当我尝试 ndk-build (V=1) 的详细日志时,存在上述包含路径。
r15c NDK 的日志:
--sysroot
/home/airwatch/Android/android-ndk/sysroot
-isystem
/home/airwatch/Android/android-ndk/sysroot/usr/include/arm-linux-androideabi
Run Code Online (Sandbox Code Playgroud)
当我尝试 r15c NDK 的详细日志时,会出现上面的包含路径。
由于我的项目要求,无法配置独立工具链。有没有办法摆脱这个 sysroot?
正如上面评论中提到的,这里有完整的解释: https: //android.googlesource.com/platform/ndk/+/master/docs/UnifiedHeaders.md
\n\n\n\n统一标头
\n\n在 NDK r14 之前,我们为每个 API 版本都有一组 libc 标头。在许多情况下,这些标头是不正确的。许多公开的 API 并不存在,而其他 API 则不存在。
\n\n在 NDK r14 中(作为一项选择功能),我们将它们统一为一组标头,称为统一标头。此单个标头路径用于每个平台级别。API 级别防护由 #ifdef 处理。\n 这些标头可以在 prebuilts/ndk/headers 中找到。
\n\n统一标头是直接从 Android 平台构建的,因此它们是最新且正确的(或者至少,NDK 标头中的任何错误也将是平台标头中的错误,这意味着我们\'更有可能找到它们)。
\n\n在 r15 中,默认使用统一标头。在 r16 中,旧标头已被删除。
\n\n已知的问题
\n\n\n
\n\n- 不支持开箱即用的使用 GCC 的独立工具链。要使用 GCC,请在编译时传递 -D__ANDROID_API__=$API。注意:这不是我们要修复的问题。
\n在构建系统中支持统一标头 \n
\n\n\n
\n\n- 与使用已弃用的 NDK 标头相比,统一标头仅需要进行少量更改。作为参考,此补丁添加了对 ndk-build 的支持: https: //android-review.googlesource.com/c/239934/
\n编译时间
\n\nsysroot现在是 $NDK/sysroot。以前是\n $NDK/platforms/android-$API/arch-$ARCH。\n
\n\n- \n
-isystem $NDK/sysroot/usr/include/$TRIPLE编译时通过。三元组具有以下映射:Arch Triple
\n\n
\n ARM arm-linux-androideabi
\n ARM64 aarch64-linux-android
\n MIPS mipsel-linux-android
\n MIPS64 mips64el-linux-android
\n x86 i686-linux-android
\n x86_64 x86_64-linux-android这是特定于体系结构的标头所必需的,例如 asm/ 和 machine/ 中的标头。我们计划教 Clang 的驱动程序自动搜索架构特定的包含目录,但这尚未完成。
\n\n\n
\n- \n
-D__ANDROID_API__=$API编译时通过。此定义过去由\n 提供<android/api-level.h>,但只有一组标头\n 这不再可能。将来我们将考虑添加\n -mandroid-version 或类似于 Clang 的功能,因此这是自动的。- \n
在链接时,不进行任何更改。所有链接时构建行为都应与已弃用的标头行为匹配。
--sysroot仍应指向\n $NDK/platforms/android-$API/arch-$ARCH/。
| 归档时间: |
|
| 查看次数: |
5477 次 |
| 最近记录: |