【问题标题】:Tegra Nsight and locating the Android NDKTegra Nsight 和定位 Android NDK
【发布时间】:2016-10-13 04:41:26
【问题描述】:

我正在尝试构建一个 Android 原生活动应用程序,使用 CMake 生成一个 Tegra Nsight Visual Studio 项目。对于本机活动,我必须找到android_native_app_glue.c/.h,它位于 Android NDK (sources/android/native_app_glue) 内的可预测位置。我的 CMake Android 工具链文件仅定义 CMAKE_SYSTEM_NAME 和 API 版本,如 CMake documentation 中所述。

但是,我没有看到任何定义正在使用的 Android NDK 实际位置的 CMake 变量。根据this,在Android Studio 中构建时,定义了ANDROID_NDK CMake 变量,但从命令行调用CMake 时并非如此。

我已经转储了所有 CMake 变量,唯一包含我的 NDK 位置的内容是 CMAKE_CXX_COMPILERCMAKE_CXX_IMPLICIT_LINK_DIRECTORIES。我可以解析其中一个来确定ANDROID_NDK 位置 - 但我认为必须有更直接的方法?

【问题讨论】:

    标签: c++ android-ndk cmake nsight


    【解决方案1】:

    显然用于实际编译的 NDK 是由 Visual Studio 确定的。您可以在 Visual Studio Nsight 属性中更改此设置。因此,在 CMake 生成时,无法可靠地确定实际的 NDK。

    但是,通过查看 CMake 源代码,它使用注册表来确定要编译的 Nsight Tegra 版本。存在一个注册表键HKLM\SOFTWARE\NVIDIA Corporation\Nsight Tegra\ndkRoot,它给出了使用 Nsight 安装的 NDK 根目录的位置,这可以在 CMake 中用于定位android_native_app_glue.c/.h 文件:

    get_filename_component(ANDROID_NDK "[HKEY_LOCAL_MACHINE\\SOFTWARE\\NVIDIA Corporation\\Nsight Tegra\\;ndkRoot]" ABSOLUTE)
    set(app_sources 
        "${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c"
        "${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.h"
    ...)
    

    如果在 Visual Studio Nsight 属性中覆盖了 NDK 根目录,这些文件可能不是来自实际用于编译的 NDK,但这似乎是一个合理的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-15
      • 1970-01-01
      • 2011-08-06
      • 2015-08-28
      • 2011-11-25
      相关资源
      最近更新 更多