如何在WSL中成功安装并运行GCC?附跨系统调用与文件路径疑问
WSL 安装GCC失败问题梳理
Windows版Linux子系统作为虚拟机的轻量替代方案,非常适合Linux学习场景,但它的文件管理逻辑和传统虚拟机差异很大,刚接触的用户很容易搞不懂逻辑。例如WSL的系统数据默认存储在Windows侧的映射路径为:C:\Users\<username>\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\rootfs\usr\
实际遇到的问题流程
- 第一次安装GCC时,在WSL终端输入命令:
sudo apt install gcc - 输入版本验证命令:
gcc --version
系统返回结果:Command 'gcc' not found, but can be installed with: sudo apt install gcc - 参考过其他技术社区的解决方案后,依次执行了以下命令:
执行完成后再次验证GCC版本,仍然报相同的找不到命令的错误。sudo apt-get update && sudo apt-get upgrade -y sudo apt autoremove -y sudo apt-get install gcc -y
目前我已经在Windows系统中安装了TDM-GCC,之前在传统虚拟机环境下也通过sudo命令成功安装过GCC。现在希望用WSL替代虚拟机,降低C语言开发时的内存占用,具体疑问包括:
- 累计尝试下载了多少次GCC安装文件?
- 在Windows资源管理器中查看本该存储GCC文件的路径,为什么显示为空?
- 下载的GCC安装文件实际被存储在哪个位置?
- 怎么操作才能在WSL中正常启动使用GCC?
- 能不能在WSL终端里直接调用Windows系统下已经安装好的GCC来编译C代码?
以上疑问都源于对WSL与Windows的文件系统交互逻辑不熟悉,希望得到针对性的实用解答,避免因虚拟机内存占用过高频繁中断开发流程。
对应问题解答
- 安装尝试次数统计
你一共发起过2次GCC安装请求:第一次是直接执行sudo apt install gcc,第二次是执行完系统更新、无用依赖清理后的sudo apt-get install gcc -y,两次流程都没有完成实际的包部署,所以系统始终找不到GCC命令。 - Windows侧路径显示为空的原因
你在Windows资源管理器中打开的rootfs/usr路径,本身就是WSL对Windows侧暴露的过滤视图——WSL会默认隐藏系统级目录的真实文件内容,避免Windows侧的程序误修改系统文件导致WSL文件系统损坏,所以你看到的空路径是正常的权限控制表现,不代表WSL内部对应路径真的没有文件。 - 安装文件的实际存储位置
apt下载的软件包缓存,实际存放在WSL内部的路径为/var/cache/apt/archives/,对应Windows资源管理器的映射路径是rootfs/var/cache/apt/archives/,只是这个目录默认对Windows侧的浏览权限做了隐藏,所以你在资源管理器里看不到。
绝大多数情况下安装失败的核心原因,是执行sudo apt install前没有完成软件源索引更新,或者安装过程中出现了磁盘空间不足、依赖版本冲突的报错(这类报错信息往往滚动显示在终端上方,很容易被忽略),导致安装包没有解压部署到系统可执行文件目录/usr/bin下。 - WSL中正常使用GCC的操作步骤
- 先在WSL终端执行
df -h /,确认WSL虚拟磁盘的剩余空间大于2G,排除空间不足导致安装中断的问题; - 执行
sudo apt update,等待软件源索引更新完成,不要中途关闭窗口; - 执行
sudo apt install --reinstall gcc g++ build-essential,安装完成后在WSL内部执行which gcc确认命令路径,不要通过Windows资源管理器查看文件是否存在。
- 先在WSL终端执行
- WSL调用Windows侧GCC的可行性
完全可以实现。WSL默认配置下会自动把Windows系统的PATH路径注入到WSL的环境变量中,你只需要在WSL终端执行which gcc,如果输出路径是/mnt/c/TDM-GCC-64/bin/gcc.exe这类带/mnt/c前缀的地址,就说明已经可以直接调用Windows侧的TDM-GCC完成编译。
需要注意的是,跨系统调用编译生成的可执行文件是Windows原生格式,无法在WSL的Linux环境下直接运行。如果只是做C代码语法检查、生成Windows端可执行文件可以直接使用,如果需要编译能在Linux环境下运行的程序,还是建议在WSL内部原生安装GCC。
另外,尽量不要在Windows资源管理器中直接修改WSL rootfs目录下的文件,这类操作很容易造成WSL文件系统权限损坏,所有涉及WSL内部文件的调整,都建议在WSL终端内完成。
内容的提问来源于stack exchange,提问作者qiu
相关产品推荐
相关产品推荐

