MacOS编译hello_xr——记一次CMake搜索路径限制导致的ANDROID_NATIVE_APP_GLUE not found

news/2024/11/16 12:11:02/
  1. 首先,由于之前使用过Unity, 系统已经装好了android SDK和NDK, 所以在hello_xr文件夹下, 用local.properties文件来设置系统中二者的路径:
sdk.dir=/Applications/Unity/Hub/Editor/2022.3.48f1c1/PlaybackEngines/AndroidPlayer/SDK/
# ndk.dir=/Applications/Unity/Hub/Editor/2022.3.48f1c1/PlaybackEngines/AndroidPlayer/NDK

这里由于后面编译时, 系统提示ndk.dir这种方式已经落伍了,不推荐使用,所以注释掉了, 改为在build.gradle中配置其路径, 版本号也要进行对应的修改, build.gradle中修改后的对应处如下所示:

    android.ndkPath = "/Applications/Unity/Hub/Editor/2022.3.48f1c1/PlaybackEngines/AndroidPlayer/NDK/"ndkVersion "23.1.7779620"
  1. 编译期间,又遇到一个找不到ANDROID_NATIVE_APP_GLUE的问题, 当时报错如下:
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.Please set them or make sure they are set and tested correctly in the CMake files:/Users/Documents/OpenXR-SDK-Source/src/tests/c_compile_test/ANDROID_NATIVE_APP_GLUEused as include directory in directory /Users/Documents/OpenXR-SDK-Source/src/tests/c_compile_test/Users/Documents/OpenXR-SDK-Source/src/tests/list_json/ANDROID_NATIVE_APP_GLUEused as include directory in directory /Users/Documents/OpenXR-SDK-Source/src/tests/list_json

搜了一下,对应处的CMakeLists.txt是这样写的:

#......
elseif(ANDROID)set(OPENGL_INCOMPATIBLE TRUE) #不兼容OPEN GLfind_path(ANDROID_NATIVE_APP_GLUE android_native_app_glue.hPATHS ${ANDROID_NDK}/sources/android/native_app_glue  )

也就是说, 在给定的目录下查找android_native_app_glue.h这个文件, 找到后将其所在目录赋给ANDROID_NATIVE_APP_GLUE.

于是确认了下系统中该目录是否存在该文件, 结果发现是有的.

那么为什么查找结果是not found呢?
请教了一下ChatGPT, 列出许多种可能, 最后定位到是这个问题:

在交叉编译时,CMake 的 CMAKE_FIND_ROOT_PATH 或 CMAKE_SYSROOT 参数可能会限制搜索路径。可以在
CMake 配置文件中临时打印这些变量的值,确保没有限制搜索范围:

message("CMAKE_FIND_ROOT_PATH is: ${CMAKE_FIND_ROOT_PATH}")
message("CMAKE_SYSROOT is: ${CMAKE_SYSROOT}")

如果它们包含限制,可以通过临时调整 CMAKE_FIND_ROOT_PATH_MODE_INCLUDE 和 CMAKE_FIND_ROOT_PATH_MODE_LIBRARY 的值,使其允许在本地路径中搜索:

set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH)

经过调整后,就编译成功啦


http://www.ppmy.cn/news/1547443.html

相关文章

Dubbo分布式日志跟踪实现

前言 随着越来越多的应用逐渐微服务化后,分布式服务之间的RPC调用使得异常排查的难度骤增,最明显的一个问题,就是整个调用链路的日志不在一台机器上,往往定位问题就要花费大量时间。如何在一个分布式网络中把单次请求的整个调用日…

Leetcode刷题笔记14

136. 只出现一次的数字 136. 只出现一次的数字 - 力扣(LeetCode) 核心思想:按位异或运算 利用按位异或运算的性质来解决这个问题: 异或运算的性质: a ^ a 0:相同的数异或结果为0。 a ^ 0 a&#xff1a…

JWTUtil工具类

写一个Jwt工具类 导入如下pom.xml依赖 <!--fastjson依赖--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.33</version></dependency><!--jwt依赖--><dependenc…

Electron 项目实现下载文件监听

Electron 项目实现下载文件监听 随着现代应用程序功能的不断扩展&#xff0c;用户对下载文件的需求也越来越高。特别是在 Electron 应用程序中&#xff0c;提供一个高效、可靠的下载管理功能是提升用户体验的 关键之一。本文将详细介绍如何在 Electron 项目中实现下载文件的监…

确保以管理员权限运行 Visual Studio 开发者命令提示符

文章目录 解决方法&#xff1a;1. 以管理员身份运行命令提示符2. 改变目录权限3. 改变项目目录位置4. 检查文件系统权限 总结&#xff1a; ********************************************************************** ** Visual Studio 2022 Developer Command Prompt v17.12.0 …

网关在能源物联网中扮演了什么角色?

随着通信、物联网、云平台等技术的飞速发展&#xff0c;越来越多能源用户希望借助先进的管理手段&#xff0c;对能源进行分布式监测、集中管理&#xff0c;构建能源物联网。准确的分布式监测和集中管理有助于制定更科学合理的节能减排计划。企业或能源使用单位可以依据能源物联…

论文 | The Capacity for Moral Self-Correction in LargeLanguage Models

概述 论文探讨了大规模语言模型是否具备“道德自我校正”的能力&#xff0c;即在收到相应指令时避免产生有害或偏见输出的能力。研究发现&#xff0c;当模型参数达到一定规模&#xff08;至少22B参数&#xff09;并经过人类反馈强化学习&#xff08;RLHF&#xff09;训练后&…

4.1 Android NDK 简介

原生开发套件&#xff08;NDK&#xff09;是一套工具&#xff0c;使您能够在 Android 应用中使用 C/C 代码&#xff0c;并提供众多平台库&#xff0c;您可以使用这些平台库管理原生 activity 和访问实体设备组件&#xff0c;例如传感器和触控输入。如果您需要实现以下一个或多个…