WSL下搭建C开发环境,解决stdio.h缺失,build-essential安装失败,包依赖问题

WSL2中GCC环境搭建:从工具链原理到离线部署实战 GCC并非单一可执行程序,而是由编译器前端(cc1)、汇编器(as)、链接器(ld)和头文件/库组成的协同工具链;其正确运行依赖glibc版本、内核syscall支持、APT包契约(如build-essential对gcc与libc6-dev的版本绑定)及文件系统语义(如/mnt/c路径限制)。在WSL2这一轻量级Linux容器运行时中,环境一致性尤为关键——内核精简导致部分syscall缺失,9P挂载不支持符号链接,PATH与update-alternatives配置错误易引发多版本冲突。本文聚焦Ubun 阅读详情

序

在安装WSL下的C开发环境时,遇到了几个坑,在此记录下,借需要的朋友参考。

事件经过:

  1. 首先安装WSL,直接在Microsoft商店安装Ubuntu 20.04
  2. 之后进入Ubuntu,编写C代码,用gcc编译的时候开始报错,提示stdio.h头文件缺失
  3. 发现少了build-essential,尝试apt-get安装,继续报错,告警信息为包版本缺失(或不支持)
  4. 之后尝试安装aptitude,依旧是依赖包报错
  5. 换思路,更换源,发现换错源,更正为正确源
  6. apt-get update后,apt-get build-essential成功,最终编译成功。

安装WSL

这部分教程较多,没遇到什么坑,不细说了。

编写.C文件并编译

编写hello.c:

#include <stdio.h>

int main(int argc,char *argv[])
{
    printf("Hello World!");
}

使用gcc hello.c -o hello进行编译

安装gcc

报gcc: command not found,说明gcc未安装,输入apt-get install gcc,等待安装完成,继续编译,告警stdio.h:没有该文件或目录,代表build-essential未安装。

安装build-essential

执行命令sudo apt-get install build-essential,记得sudo防止权限不够,如果正常安装了,那编译应该能通过了,不过我这里报了新的告警,类似下面这种:

maistora@maistora:~$ sudo apt-get install build-essential
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 build-essential : Depends: libc6-dev but it is not going to be installed or
                            libc-dev
                   Depends: gcc (>= 4:4.4.3) but it is not going to be installed
                   Depends: g++ (>= 4:4.4.3) but it is not going to be installed
E: Broken packages

网上针对这种告警有不少讨论,有说版本stable和unstable问题的,有说包依赖关系导致的,需要使用aptitude安装的,我感觉都挺靠谱,就是行不通,所以介绍下我这里可行的方法。

切换源

切换源就是我找到的解决方法,但不能盲目地切换,源的选择和Ubuntu版本密切相关,下面细说:
切换源的方法来自坚强的山猫博客
Ubuntu 20.04换阿里源
首先在Ubuntu的bash下执行lsb_release -a,查看自己的Ubuntu版本
我的版本
之后到阿里源中查看是否有需要的源,并按照上述博客中的方法替换掉/etc/apt/source.list中的源,Ubuntu20.04替换源后,source.list如下:
Ubuntu20.04版本源
保存后退出,运行sudo apt-get update,应该能成功运行,随后执行sudo apt-get install build-essential,即可安装成功,最后gcc hello.c -o hello,编译成功:
编译运行结果
至此C环境安装暂且告一段落。

Ubuntu安装Rust的系统级依赖与rustup全流程指南 Rust 是一门系统级编程语言,其编译器 rustc 和构建工具 cargo 严重依赖 Linux 系统底层能力。理解 build-essential(含 gcc、g++、make、libc6-dev)等系统包的作用机制,是解决 'command not found: rustc' 或 'linker cc not found' 等高频问题的技术前提。rustup 作为官方推荐的工具链管理器,并非简单二进制分发器,而是通过动态下载、符号链接和 PATH 注入实现多版本隔离,其可靠性直接受限于 Shell 初 阅读详情

相关推荐

WSL 2搭建CSAPP实验环境:从安装到32位库配置指南

在计算机系统学习中,搭建一个可用的Linux实验环境是高效实践的前提。虚拟机虽然能提供完整系统,却常受制于启动慢、资源占用高。WSL(Windows Subsystem for Linux)作为轻量级Linux用户态环境,凭借秒级启动、低资源开销和与Windows的深度集成,成为CSAPP等课程实验的理想选择。理解WSL与虚拟机的原理差异,能帮助开发者根据场景选择合适技术:WSL适合命令行工具链、调试器与文件互访,虚拟机适合完整桌面环境。通过安装WSL 2、配置Ubuntu、部署GCC/GDB/binuti

weixin_33978044的博客 303

因依赖问题导致build-essential安装失败

报错内容: 下列软件包有未满足的依赖关系: build-essential : 依赖: libc6-dev 但是它将不会被安装 或 libc-dev 依赖: gcc (>= 4:7.2) 但是它将不会被安装 依赖: g++ (>= 4:7.2) 但是它将不会被安装 依赖: dpkg-dev (>= 1.17.11)

qq_45618214的博客 6240

RT-Thread开发环境搭建:从Python 2.7到ARM GCC的完整配置指南

嵌入式开发中,构建系统与工具链配置是项目成功的基础。构建系统负责管理源代码的编译、链接过程,而工具链则是将高级语言转换为目标硬件可执行代码的核心组件。在实时操作系统开发领域,SCons作为基于Python的构建工具,因其灵活的脚本能力和自动依赖解析而备受青睐,能够显著提升复杂嵌入式项目的构建效率。ARM GCC工具链作为开源编译器的代表,为Cortex-M系列MCU提供了稳定可靠的代码生成能力。本文聚焦于RT-Thread操作系统开发环境的搭建,详细解析Python 2.7环境配置、SCons构建工具集成以

weixin_30291791的博客 512

win10子系统wsl2-ubnutu安装build-essential出现404解决方法

  安装build-essential一直404,并且尝试用一些特殊网络还是不行。终于找到解决方法。   解决方法是更换软件源。 首先备份原来的源,用来出错后进行恢复 sudo cp /etc/apt/sources.list/etc/apt/sources.list_backup 如果更新源后出错了恢复方法,还原更新源: sudo cp /etc/apt/sources.list_...

qq_43228427的博客 1905

零硬件成本搭建QEMU ARM驱动开发环境:从内核编译到模块调试全流程

Linux内核模块是扩展操作系统核心功能的关键机制,它允许开发者在不重新编译整个内核的情况下动态加载和卸载驱动程序。其工作原理基于内核提供的模块加载接口,通过insmod/rmmod命令实现。这项技术的核心价值在于极大地提升了驱动开发的灵活性和系统可维护性,是嵌入式Linux和系统底层开发的基石。在应用场景上,它广泛服务于嵌入式设备驱动、虚拟化设备模拟以及内核功能扩展等领域。本文聚焦于利用QEMU模拟器构建完整的ARM架构Linux驱动开发与调试环境,通过模拟Versatile Express等经典硬件平台

weixin_34417200的博客 297

IT986x嵌入式开发环境搭建:从交叉编译到VSCode配置全攻略

嵌入式开发环境是连接主机与目标硬件的重要桥梁,其核心在于交叉编译工具链的构建。交叉编译原理允许开发者在x86架构主机上生成ARM架构的可执行代码,这是嵌入式系统开发的基础技术。掌握这一技术对于提升开发效率、确保代码兼容性具有关键价值,广泛应用于物联网设备、多媒体终端等场景。本文以IT986x系列芯片为例,深入解析开发环境搭建的完整流程,涵盖工具链配置、SDK部署、VSCode远程开发等关键环节,并针对常见编译错误如“undefined reference”和环境变量失效等问题提供解决方案,帮助开发者快速构建

weixin_34221276的博客 349

WSL Containers(wslc)完整安装与使用复盘手册

WSLContainers(wslc)是微软内置在WSL 2.9.3+版本的原生Linux容器CLI工具,无需额外安装Docker等第三方客户端,可直接运行OCI标准容器镜像。它原生集成Windows系统,CLI语法高度兼容Docker,资源占用低,适合轻量开发场景,但不支持Compose、K8s等生产级功能。安装需更新至WSL预发布内核,关键步骤包括强制关闭WSL实例、重启终端以刷新缓存。使用体验接近Docker基础命令,支持镜像管理、容器生命周期操作等。当前为预览版,建议与Podman/DockerDe

AITechLab 的博客 1453

具身智能工程师的硬核知识骨架:C++、Linux、离散数学与信号系统

具身智能是AI与物理世界深度耦合的交叉领域,其核心在于实时性、确定性与物理可执行性。它并非单纯依赖大模型或机器人外壳,而是建立在底层系统能力之上:C++提供内存与时序的绝对控制力,Linux承担实时调度与硬件抽象的神经中枢角色,离散数学支撑状态机建模与多智能体协同逻辑,信号与系统则是传感器数据处理与噪声抑制的理论根基。这四者共同构成从感知、决策到执行的完整闭环能力链。本文聚焦真实产线与实验室验证的工程实践路径,覆盖毫秒级控制循环实现、PREEMPT_RT内核调优、机器人动作状态建模、IMU卡尔曼滤波落地等关

weixin_30236595的博客 430

centos build-essential 报错

安装常用的开发编译工具包即可 yum groupinstall "Development Tools" 安装 “开发工具” 安装依赖包: autoconf apr automake apr-util bison avahi-libs byacc boost-system cscope boost-thread ctags bzip2 diffstat cp...

Alex 3644

Linux环境安装配置实验报告:从虚拟机到开发环境全链路指南

Linux系统作为服务器与开发环境的核心操作系统,其安装、网络配置、权限管理和工具链部署是开发者需要掌握的基础能力。在虚拟机中安装Linux发行版,通过netplan配置静态IP与DNS,使用apt更换软件源,可以解决网络连通性与软件包下载问题;而用户、sudo权限、文件权限位以及GCC/Python/Git/Node.js环境验证,则保障了多用户下的安全与可复现开发环境。这些操作不仅用于高校实验报告,也适用于换机初始化、云端实例配置等场景。西南科技大学的Linux环境安装配置实验报告,正是以虚拟机安装Li

weixin_34209851的博客 288

GCC 14.2.0 源码编译全攻略:从依赖配置到系统集成

编译器是软件开发的核心工具,负责将高级语言源代码转换为机器可执行代码。其工作原理涉及词法分析、语法分析、语义分析、优化和代码生成等多个阶段。GCC(GNU Compiler Collection)作为一款开源的、支持多语言和多平台的编译器集合,在嵌入式开发、高性能计算和持续集成等场景中具有重要技术价值。通过从源码构建GCC,开发者可以获得比系统仓库更新的版本,进行特定平台的深度优化,或为项目创建完全可控的编译环境。本文聚焦于GCC 14.2.0的源码编译过程,详细解析了构建前的环境与依赖准备、关键的配置选项

weixin_34239169的博客 440

sudo: apt-get:找不到命令&&build-essential没有包

对这种情况往往是没搞清系统原因,如果系统是centOS,需要用yum命令,直接替换apt-get即可 由于我用的别人的服务器,开始没看到系统版本,可以使用以下命令查看系统版本 根据查看,是centOS,修改命令,并运行 configure的时候依赖build-essential build-essential是Debian系的meta package的名字,RH系里可以运行;在centOS里改成如下即行了 或者用 会更大更全 yum groupinstall "Developmen..

drt0519的专栏 6114

从Chimera到ChimeraX:科研绘图升级指南,让你的论文配图更专业

本文详细介绍了从UCSF Chimera升级到ChimeraX的科研绘图指南,帮助研究者提升论文配图质量。ChimeraX在渲染引擎、大分子处理能力和动画功能上具有显著优势,特别适合生命科学和结构生物学领域。文章涵盖材质设置、专业配色、工作流程和期刊适配等核心技巧,助力产出出版级分子可视化图像。

weixin_33670786的博客 934

Ubuntu 22.04深度安装配置指南:开发环境基座构建实战

Ubuntu 是广泛使用的 Linux 发行版,其 LTS 版本(如 22.04)因长期支持、稳定内核与完善生态,成为开发者、AI 工程师和系统运维人员的首选操作系统基座。理解其安装本质——并非图形化向导操作,而是对分区策略、源镜像选择、UEFI/Secure Boot 配置、驱动兼容性及基础工具链(如 build-essential、fcitx5)的底层决策——直接决定后续 Python/CUDA/Docker 等技术栈的稳定性与效率。本文聚焦 Ubuntu 22.04 这一关键 LTS 版本,结合金融量

weixin_33966095的博客 317

自适应粒子群优化(Adaptive Particle Swarm Optimization,APSO

下面是一个关于自适应粒子群优化(Adaptive Particle Swarm Optimization,APSO)的博客,希望可以帮助您。提示:以下是本篇文章正文内容,下面案例可供参考在上面的代码中,表示粒子的数量,表示解空间的维度,表示迭代次数,表示优化的目标函数。在__init__方法中,我们初始化了粒子群的位置和速度,并将每个粒子的位置作为其最优解,将其适应度值初始化为正无穷。我们还初始化了学习因子和惯性权重的参数。在run方法中,我们迭代了次,计算每个粒子的适应度值和最优解。

weixin_52026057的博客 9916

AXI2APB_bridge 设计

此处研究AHB Slave到 APB master的桥接器,实现接口转化,例如下图之后是参数描述

Starry__的博客 4037

WSL2+QEMU搭建ARM嵌入式开发环境实战

ARM嵌入式开发环境构建是嵌入式工程师的核心能力之一,涉及交叉编译、固件启动、串口调试与GDB远程调试等基础技术原理。其技术价值在于突破物理硬件限制,实现U-Boot、Linux内核、设备树的快速迭代验证,显著提升固件开发效率与可复现性。典型应用场景包括国产SoC(如RK3568、i.MX6ULL)的启动流程分析、设备树适配、启动阶段汇编级调试等。本文聚焦WSL2与QEMU协同构建轻量、高效、可快照的ARM64开发沙盒,深度融合U-Boot编译配置、QEMU虚拟硬件建模及GDB符号级调试链路,解决Windo

weixin_34296641的博客 322

Python与CAD系列基础篇(二)创建点和直线并修改样式

①通过pyautocad连接AutoCAD进行处理②通过ezdxf处理dxf格式文件。创建和编辑点和直线的方法,并演示如何修改它们的样式、颜色和线型。

weixin_43894929的博客 3036

GCC安装失败真相:不是命令问题,是工具链认知偏差

GCC并非单一可执行程序,而是一套包含前端、中端、后端的编译器框架,其核心价值在于跨架构代码生成与深度平台适配能力。理解预处理、编译、汇编、链接四阶段原理,是解决‘找不到main’‘版本未更新’等高频问题的前提。在Ubuntu、Windows(MSYS2)、嵌入式(arm-none-eabi-gcc)等多场景下,安装本质是部署完整工具链——含驱动程序、架构专用编译器、标准库头文件及运行时库。技术实践表明,90%的安装失败源于libc6-dev缺失或update-alternatives未配置,而非网络或权限

weixin_34005042的博客 161

黑猫带你学eMMC协议第2篇:eMMC部分相关名词释义

1 前言 1.1 声明 本文依据eMMC JEDEC5.1、网络资料及个人工作经验整理而成,如有错误请留言。 本文结合eMMC JEDEC5.1协议手册查看效果更佳。 1.2 本文背景 本文关键词不包括emmc jedec5.1协议第3章节:《Terms and definitions》内容。关于emmc协议层的关键词,直接查阅spec相关章节即可,清晰明了,此处没必要再列出。 本文为本人工作学习中常听到或常用到关乎于emmc/flash的一些关键词合集,没有固定分类,不需要强行记忆,供查询使用。 1.

黑猫奥利奥的博客 7444

AI 时代嵌入式工程师的能力模型与学习路线:全系列收官

AI 时代嵌入式工程师的能力模型与学习路线:全系列收官

weixin_42162924的博客 40

嵌入式Linux开发环境搭建:必备工具安装与配置指南

嵌入式系统开发中,Linux以其开源、稳定和可裁剪性成为主流选择。无论是编写驱动程序还是应用层代码,开发者都需要一套能在主机与目标板之间高效协作的工具集。交叉编译工具链实现了从x86到ARM的代码生成,构建工具则管理复杂的编译流程,而GDB、QEMU等调试工具提供了验证手段。这些工具共同构成嵌入式Linux开发的基础环境。在具体工程实践中,环境配置是否完整直接影响开发效率。本文围绕嵌入式Linux开发环境的搭建,系统梳理了必备工具的安装、配置与验证方法,旨在帮助开发者构建可靠的工作环境,为后续学习与实践铺平

weixin_33796205的博客 279

基于Simulink的四足机器人楼梯攀爬仿真模型

构建一个基于Simulink的四足机器人楼梯攀爬仿真模型,旨在模拟四足机器人在面对楼梯等障碍时的运动控制和稳定性调整。以下是一个详细的步骤指南,帮助你从零开始创建这样一个仿真模型。

xiaoheshang_123的博客 247

GCC本质与四大平台安装指南:从工具链理解到实战验证

GCC(GNU Compiler Collection)不是单一可执行程序,而是涵盖编译、汇编、链接全流程的开源编译工具链集合,其核心价值在于支持C/C++等语言向机器码的标准化转换,并提供跨平台、可定制的构建能力。理解GCC需把握其多组件协同机制(如cpp预处理、cc1编译、as汇编、ld链接)及目标平台适配逻辑(如x86_64-linux-gnu或arm-none-eabi)。在Ubuntu、Windows(MinGW-w64)、macOS(Homebrew+Xcode CLI)和离线RPM环境等主流场

weixin_33853827的博客 199

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

从零实现C语言编译器:编译原理核心流程与实践指南

编译器作为连接高级语言与机器指令的关键系统软件,其核心原理是将源代码转换为可执行代码。这一过程通常涉及词法分析、语法分析、语义检查、中间代码生成与优化等阶段,其中递归下降解析和三地址码生成是经典实现技术。理解编译器工作原理不仅能提升程序调试能力,更能深化对计算机系统运行机制的认识。对于C语言开发者而言,通过实践教学型编译器项目,可以直观掌握从变量声明、算术运算到控制流语句的完整翻译流程,为后续探索语言设计或领域特定语言实现奠定基础。

weixin_34221332的博客 326

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

上一篇: 嵌入式软件工程师学习路线
下一篇: Leetcode“存在重复元素“的多种排序算法实现
慕易杨
博客等级 码龄11年 7粉丝 7原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值