基于VSCode+CMake+debootstrap搭建Ubuntu交叉编译开发环境

ops/2025/1/20 13:18:22/

基于VSCode+CMake+debootstrap搭建Ubuntu交叉编译开发环境

  • 1 基于debootstrap搭建目标系统环境
    • 1.1 安装必要软件包
    • 1.2 创建sysroot目录
    • 1.3 运行debootstrap
    • 1.4 挂载必要的虚拟文件系统
    • 1.5 进入目标系统
    • 1.6 使用目标系统(以安装zlog为例)
    • 1.7 清理和退出
  • 2 基于VSCode+CMake搭建交叉编译环境
    • 2.1 安装CMake
    • 2.2 安装交叉编译工具链
    • 2.3 安装VSCode
    • 2.4 创建示例项目

1 基于debootstrap搭建目标系统环境

ubuntu22.04-amd64为主机系统,以ubuntu22.04-arm64(aarch64)系统作为目标系统,在主机中搭建一个虚拟的目标设备,以使用真实目标设备的方式来使用该虚拟目标设备,在其中安装依赖库,为交叉编译提供支持。

1.1 安装必要软件包

确保主机已经安装了 debootstrap, qemu-user-staticbinfmt-support 工具

sudo apt update
sudo apt install debootstrap qemu-user-static binfmt-support

1.2 创建sysroot目录

我们需要为新的根文件系统创建一个工作目录。这里我们选择 ~/ubuntu-jammy-arm64 作为 sysroot 的位置。

sudo mkdir ~/ubuntu-jammy-arm64

1.3 运行debootstrap

使用 debootstrap 下载并解压基本的 Ubuntu 22.04 (代号 jammy) 软件包到指定的目标文件夹中。由于我们要针对 ARM64 架构进行操作,因此需要指定 --arch=arm64 参数,并且提供一个适合 ARM 架构的镜像源地址。

sudo debootstrap --arch=arm64 jammy ~/ubuntu-jammy-arm64 http://mirrors.ustc.edu.cn/ubuntu-ports/

1.4 挂载必要的虚拟文件系统

实际测试发现,这一步并非必须。为了方便,可以省略挂载过程,在出现问题时再进行挂载即可。

sudo mount --bind /proc ~/ubuntu-jammy-arm64/proc
sudo mount --bind /sys ~/ubuntu-jammy-arm64/sys
sudo mount --bind /dev ~/ubuntu-jammy-arm64/dev
sudo mount --bind /dev/pts ~/ubuntu-jammy-arm64/dev/pts

1.5 进入目标系统

在主机系统中可以输入一下命令来进入目标系统

sudo chroot ~/ubuntu-jammy-arm64

1.6 使用目标系统(以安装zlog为例)

从github下载zlog的最新release版本,(此处为zlog-1.2.18.tar.gz),拷贝到目标系统的某一目录下(此处为/home/workspace,对应于主机系统的 ~/ubuntu-jammy-arm64/home/workspace
https://github.com/HardySimpson/zlog/releases

# 进入目标系统
# sudo chroot ~/ubuntu-jammy-arm64

安装必要的构建工具

apt update
apt install build-essential

编译和安装zlog

# 创建和进入工作空间目录
mkdir /home/workspace
cd /home/workspace
# 解压源码
tar -zxvf zlog-1.2.18.tar.gz
cd zlog-1.2.18
# 编译
make
# 安装
make install
# 刷新动态l链接器,使程序可以找到zlog
ldconfig

测试zlog,创建目录/home/workspace/test-zlog
在该目录下创建源文件main.c

// main.c#include <stdio.h> 
#include "zlog.h"int main(int argc, char** argv)
{int rc;zlog_category_t *c;rc = zlog_init("./zlog.conf");if (rc) {printf("init failed\n");return -1;}c = zlog_get_category("my_cat");if (!c) {printf("get cat fail\n");zlog_fini();return -2;}zlog_info(c, "hello, zlog");zlog_fini();return 0;
}

在该目录下创建配置文件zlog.conf

# zlog.conf[formats]
simple = "%m%n"
[rules]
my_cat.DEBUG    >stdout; simple

编译项目

gcc -o main main.c -lzlog

执行

./main
# hello, zlog

1.7 清理和退出

在目标系统中输入一下命令可以返回到主机系统

exit

若已经挂载了文件系统,需要在主机系统中取消挂载

sudo umount ~/ubuntu-jammy-arm64/{proc,sys,dev/pts,dev}

2 基于VSCode+CMake搭建交叉编译环境

在主机中基于虚拟目标设备搭建交叉编译开发环境

2.1 安装CMake

sudo apt update
sudo apt install cmake
# 验证安装
cmake --version

2.2 安装交叉编译工具链

sudo apt update
sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu # AArch64 (64-bit)

2.3 安装VSCode

从官网下载安装包
https://code.visualstudio.com/

sudo dpkg -i code_1.96.4-1736991114_amd64.deb 

安装相关插件

  • C/C++ Extension Pack(必须)
  • Chinese (Simplified)(可选,中文显示)
  • Better Comments(可选,注释优化)
  • GitHub Copilot(可选,AI辅助)

2.4 创建示例项目

使用VSCode建立项目结构如下(~/workspace/demo
├── demo
├── CMakeLists.txt
├── main.c
其中,main.c内容与上文一致,CMakeLists.txt内容如下

# 设置CMake最低版本
cmake_minimum_required(VERSION 3.10)# 设置项目名称
project(demo C)# 设置C标准
set(CMAKE_C_STANDARD 99)
set(CMAKE_C_STANDARD_REQUIRED ON)# 设置目标系统
set(CMAKE_SYSTEM_NAME Linux)# 设置目标架构
set(CMAKE_SYSTEM_PROCESSOR aarch64)# 设置目标系统根目录
set(CMAKE_SYSROOT ~/ubuntu-jammy-arm64)
message("CMAKE_SYSROOT: ${CMAKE_SYSROOT}")# 指定交叉编译器路径
set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
message(STATUS "C Compiler: ${CMAKE_C_COMPILER}")
message(STATUS "C Compiler ID: ${CMAKE_C_COMPILER_ID}")
message(STATUS "C Compiler Version: ${CMAKE_C_COMPILER_VERSION}")
set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)
message(STATUS "C++ Compiler: ${CMAKE_CXX_COMPILER}")
message(STATUS "C++ Compiler ID: ${CMAKE_CXX_COMPILER_ID}")
message(STATUS "C++ Compiler Version: ${CMAKE_CXX_COMPILER_VERSION}")# 只在目标系统目录中查找库
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)# zlog
# 库文件
find_library(ZLOG_LIBRARY NAMES zlog
)
if (ZLOG_LIBRARY)message(STATUS "Found zlog library at: ${ZLOG_LIBRARY}")
else()message(FATAL_ERROR "zlog library not found")
endif()
# 头文件
find_path(ZLOG_INCLUDE_DIR zlog.h)
if (ZLOG_INCLUDE_DIR)message(STATUS "Found zlog.h at: ${ZLOG_INCLUDE_DIR}")
else()message(FATAL_ERROR "zlog.h not found")
endif()# 包含头文件
include_directories(${ZLOG_INCLUDE_DIR}
)# 添加可执行文件
add_executable(${PROJECT_NAME} main.c)# 添加链接库
target_link_libraries(${PROJECT_NAME} ${ZLOG_LIBRARY})

编译项目

mkdir build && cd build
cmake ..
make

将编译出的可执行文件demo复制到目标系统中

 sudo cp ~/workspace/demo/build/demo ~/ubuntu-jammy-arm64/home/workspace/test-zlog/

如上文,该目录下已经存在合适的zlog配置文件,进入目标系统执行demo

.sudo chroot ~/ubuntu-jammy-arm64/
cd /home/workspace/test-zlog/
./demo
# hello, zlog

http://www.ppmy.cn/ops/151682.html

相关文章

ShardingSphere 注意事项

在使用 ShardingSphere 时&#xff0c;需要特别注意一些关键点和最佳实践&#xff0c;以确保系统的稳定性、可扩展性、性能和易维护性。下面列出了在使用 ShardingSphere 时需要注意的几个重要方面&#xff1a; 1. 分片规则设计 分片策略的选择&#xff1a;ShardingSphere 支持…

头歌答案--爬虫实战

目录 urllib 爬虫? 第1关&#xff1a;urllib基础 任务描述 第2关&#xff1a;urllib进阶? 任务描述 requests 爬虫 第1关&#xff1a;requests 基础 任务描述 第2关&#xff1a;requests 进阶 任务描述 网页数据解析 第1关&#xff1a;XPath解析网页? 任务描述…

Linux中的基本指令(一)

一、Linux中指令的存在意义 Linux中&#xff0c;通过输入指令来让操作系统执行&#xff0c;以此达到控制操作系统的目的&#xff0c;类似于Windows中的双击&#xff0c;右键新建文件&#xff0c;新建文件夹等 1.补&#xff1a;关于屏幕的几个操作指令 ①清屏指令 clear 回…

从偏差到巅峰:小哆啦与 h 指数的较量

小哆啦开始力扣每日一题的第十天 https://leetcode.cn/problems/h-index/description/ 从偏差到巅峰&#xff1a;小哆啦与 h 指数的较量 有一天&#xff0c;小哆啦发现科学城最顶级的研究员们都有一个共同的荣耀——他们的 h 指数。听说 h 指数越高&#xff0c;学术影响力越大…

EI Scopus双检索 | 2025年第四届信息与通信工程国际会议(JCICE 2025)

会议简介 Brief Introduction 2025年第四届信息与通信工程国际会议(JCICE 2025) 会议时间&#xff1a;2025年7月25日-27日 召开地点&#xff1a;中国哈尔滨 大会官网&#xff1a;www.jcice.org 由黑龙江大学和成都信息工程大学主办&#xff0c;江苏科技大学协办的2025年第四届信…

非常实用的PDF工具

有小伙伴问我PDF压缩方面的软件&#xff0c;这类的软件其实好多&#xff0c;那么今天给大家推荐一款&#xff0c;其非常好用&#xff01; 软件介绍 PDF压缩器 PDF压缩器这款软件是之前收藏的&#xff0c;已经有好几年了。 文末获取软件解压后&#xff0c;我们首先双击exe安装软…

C++,设计模式,【目录篇】

文章目录 1. 简介2. 设计模式的分类2.1 创建型模式&#xff08;Creational Patterns&#xff09;&#xff1a;2.2 结构型模式&#xff08;Structural Patterns&#xff09;&#xff1a;2.3 行为型模式&#xff08;Behavioral Patterns&#xff09;&#xff1a; 3. 使用设计模式…

Windows电脑安装File Browser与cpolar轻松搭建本地云盘

文章目录 前言1.下载安装File Browser2.启动访问File Browser3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 无论是个人用户还是企业团队&#xff0c;都希望能够有一个高效、安全的解决方案来…