xr871-开始编译环境

setup the Build Environment

Aaron-Ye edited this page on Feb 28 · 5 revisions


Content


On Windows

1. Install Cygwin / 安装Cygwin工具

  • Download Cygwin terminal tools from https://cygwin.com/install.html
    从Cygwin官方网站下载Cygwin终端setup-x86.exe
  • Run setup-x86.exe or setup-x86_64.exe(for Windows 64-bit OS) to install the Cygwin packages
    运行setup-x86.exe安装Cygwin工具包(注意:安装路径不要包含中文路径或者空格
  • Select packages we want to install(make, git, wget, binutils, vim,etc.)
    选择想要安装的工具包(make, git, wget, binutils, vim等)
    cygwin-select-tools

2. Download the toolchain / 下载安装工具链

  • Download the ARM GCC Toolchain for Windows.
    下载ARM GCC工具链Windows安装文件.
  • 解压gcc-arm-none-eabi-4_9-2015q2-20150609-win32.zip
  • C:\cygwin64\home\Administrator 目录下新建tools文件夹,如下图所示
  • ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190803171230935.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pob3VqdW5ib18yMDEx,size_16,color_FFFFFF,t_70)
  • 在tools目录下新建gcc-arm-none-eabi-4_9-2015q2文件夹,如下图所示
  • ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190803171415486.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pob3VqdW5ib18yMDEx,size_16,color_FFFFFF,t_70)
  • 将gcc-arm-none-eabi-4_9-2015q2-20150609-win32.zip解压出来的文件复制到gcc-arm-none-eabi-4_9-2015q2文件夹中,如下图所示
  • ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190803171611887.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pob3VqdW5ib18yMDEx,size_16,color_FFFFFF,t_70)

3. Setup the Build Environment / 设置编译环境

  • Download the XR871SDK Repository from github (git clone https://github.com/XradioTech/XR871.git)
    从github上下载XR871SDK仓库
  • modify the 03_SDK/xr871sdk/gcc.mk and set the variable CC_DIR to config the toolchain path
    修改gcc.mk中的CC_DIR变量设置工具链的安装路径
  CC_DIR := ~/tools/gcc-arm-none-eabi-4_9-2015q2/bin

 

On Linux

1. Select a Linux Platfrom / 选择Linux开发平台

  • Ubuntu is recommended
    推荐使用Ubuntu平台

2. Download the toolchain / 下载安装工具链

3. Setup the Build Environment / 设置编译环境

  • Download the XR871SDK Repository from github (git clone https://github.com/XradioTech/XR871.git)
    从github上下载XR871SDK仓库
  • modify the 03_SDK/xr871sdk/gcc.mk and set the variable CC_DIR to config the toolchain path
    修改gcc.mk中的CC_DIR变量设置工具链的安装路径
  CC_DIR := ~/tools/gcc-arm-none-eabi-4_9-2015q2/bin
 
<think>我们正在交叉编译OpenXR-SDK以在ARM64架构上运行。根据引用[1]和引用[2],我们知道目标平台是64位ARM(aarch64),因此需要使用aarch64-linux-gnu交叉编译工具链。同时,引用[3]提到Buildroot不支持由OpenEmbedded或Yocto生成的工具链,因此我们需要确保使用纯净的交叉编译工具链。 以下是交叉编译OpenXR-SDK的步骤: 1. **准备交叉编译环境** 安装aarch64-linux-gnu交叉编译器(如果尚未安装): ```bash sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu ``` 2. **下载OpenXR-SDK源码** ```bash git clone https://github.com/KhronosGroup/OpenXR-SDK.git cd OpenXR-SDK ``` 3. **创建构建目录并进入** ```bash mkdir build-arm64 && cd build-arm64 ``` 4. **配置CMake进行交叉编译** 使用以下CMake命令进行配置,注意指定交叉编译器以及目标系统信息: ```bash cmake -DCMAKE_SYSTEM_NAME=Linux \ -DCMAKE_SYSTEM_PROCESSOR=aarch64 \ -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc \ -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ \ -DCMAKE_INSTALL_PREFIX=./install \ -DBUILD_TESTS=OFF \ .. ``` 解释: - `-DCMAKE_SYSTEM_NAME=Linux`: 指定目标系统为Linux。 - `-DCMAKE_SYSTEM_PROCESSOR=aarch64`: 指定处理器架构为ARM64。 - `-DCMAKE_C_COMPILER`和`-DCMAKE_CXX_COMPILER`: 指定交叉编译器。 - `-DCMAKE_INSTALL_PREFIX`: 指定安装目录(可选,这里设置为当前目录下的install目录)。 - `-DBUILD_TESTS=OFF`: 通常交叉编译环境下无法运行测试程序,所以关闭测试。 5. **编译和安装** ```bash make -j$(nproc) make install ``` 编译完成后,在`install`目录下会得到ARM64架构的头文件和库文件。 6. **验证输出** 检查生成的库文件是否为ARM64架构: ```bash aarch64-linux-gnu-objdump -f ./install/lib/libopenxr_loader.so ``` 输出中应该包含`architecture: aarch64`。 **注意事项**: - 如果目标平台使用不同的C库(如glibc或musl),可能需要使用相应的工具链。上述步骤假设使用标准的glibc。 - 如果目标平台有特定的ABI要求(例如软浮点或硬浮点),请确保工具链匹配。通常aarch64-linux-gnu使用硬浮点。 - 如果遇到依赖问题(如X11等),可能需要先交叉编译这些依赖,并在CMake配置中通过`-DXXX_ROOT`或`-DXXX_LIBRARY`等变量指定路径。 根据引用[4],在Android平台上可能需要额外的步骤(如处理cxa_demangle等),但本问题仅要求交叉编译到ARM64 Linux,因此上述步骤足够。 如果目标平台是Android,则需要使用Android NDK进行交叉编译,步骤会有所不同。 以上步骤假设主机系统为x86_64 Linux。 如果遇到问题,请检查CMake输出的日志,确认是否有依赖库缺失。 §§相关问题§§ 1. 如何为Android平台交叉编译OpenXR-SDK? 2. 交叉编译OpenXR-SDK时需要处理哪些依赖项? 3. 如何验证交叉编译的OpenXR-SDK在目标设备上正常工作?</think>### 如何交叉编译 OpenXR-SDK 为 ARM64 架构 以下是完整的交叉编译流程,基于您的 ARM64 开发环境和工具链要求: #### 1. **环境准备** ```bash # 安装交叉编译工具链 (Ubuntu示例) sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu # 验证工具链 aarch64-linux-gnu-gcc --version # 应显示aarch64版本[^1] ``` #### 2. **获取源码** ```bash git clone https://github.com/KhronosGroup/OpenXR-SDK.git cd OpenXR-SDK ``` #### 3. **创建构建目录** ```bash mkdir build-arm64 && cd build-arm64 ``` #### 4. **配置 CMake 交叉编译** ```bash cmake .. \ -DCMAKE_SYSTEM_NAME=Linux \ -DCMAKE_SYSTEM_PROCESSOR=aarch64 \ -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc \ -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ \ -DCMAKE_INSTALL_PREFIX=/opt/openxr-arm64 \ -DBUILD_TESTS=OFF \ -DDYNAMIC_LOADER=ON ``` **关键参数说明**: - `CMAKE_C_COMPILER`/`CMAKE_CXX_COMPILER`:指定 ARM64 交叉编译器[^1] - `CMAKE_INSTALL_PREFIX`:ARM64 目标系统的安装路径 - `BUILD_TESTS=OFF`:禁用测试(交叉编译环境无法运行) - `DYNAMIC_LOADER=ON`:启用动态加载(适合嵌入式系统) #### 5. **编译与安装** ```bash make -j$(nproc) make install DESTDIR=./arm64-package ``` #### 6. **验证输出** ```bash # 检查库文件架构 file arm64-package/opt/openxr-arm64/lib/libopenxr_loader.so # 预期输出 libopenxr_loader.so: ELF 64-bit LSB shared object, ARM aarch64... ``` #### 7. **部署到目标板** 将 `arm64-package` 目录复制到目标板的 `/usr/local`: ```bash scp -r arm64-package user@target-board:/usr/local ``` #### 依赖项注意事项 1. **C++ ABI 问题**: - 如果遇到 `cxa_demangle` 错误[^4],在 CMake 中添加: ```cmake set(CMAKE_EXE_LINKER_FLAGS "-lgnustl_shared") ``` 2. **ETC2 纹理支持**: - 如需 Android 的 ETC2 纹理解码[^4],添加: ```cmake -DIMAGE_SUPPORT=ON -DENABLE_ETC2=ON ``` 3. **Android 特殊处理**: ```cmake -DANDROID_ABI=arm64-v8a \ -DANDROID_PLATFORM=android-24 \ -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake ``` ### 常见问题解决 **Q:遇到 `Could not find OpenXR` 错误?** A:添加显式禁用: ```cmake -DBUILD_LOADER=ON -DBUILD_API_LAYERS=OFF ``` **Q:链接失败?** A:确保目标板有兼容的 glibc 版本,或静态链接: ```cmake -DBUILD_STATIC_LOADER=ON ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值