随着开发环境需求的不断增加,Windows Subsystem for Linux 2(简称 WSL2)为开发者提供了在 Windows 系统上运行 Linux 发行版的强大工具。本文将详细介绍如何在 Windows 10 上安装和配置 WSL2,并搭建一个完整的 C++ 开发环境。
在开始安装和配置 WSL2 之前,建议先准备以下资源和工具:
这些资源将帮助您更好地理解和使用 WSL2。
打开 Windows 功能设置
启用适用于 Linux 的 Windows 子系统
在弹出的窗口中,勾选 适用于 Linux 的 Windows 子系统。
注意:WSL2 与 VMWare 不兼容,两者只能选其一。WSL2 需要启用 Hyper-V,而 VMWare 不支持 Hyper-V。若需同时使用,建议选择 WSL1。
启用虚拟机平台
重启计算机
打开管理员权限的 PowerShell
查看可用的 Linux 发行版
powershellwsl --list --online
或者使用简化命令:
powershellwsl -l -o
安装 WSL2
执行以下命令安装默认的 Ubuntu 22:
powershellwsl --install
安装完成后,系统会提示重启计算机。
重启计算机
重启后,WSL2 将自动完成安装并初始化 Ubuntu 发行版。
以下是一些常用的 Windows Subsystem for Linux(WSL)指令及其用途说明,帮助您更高效地管理和使用 WSL 环境:
查看在线可用的 Linux 发行版
bashwsl --list --online
或者:
bashwsl -l -o
用于列出可以安装的 Linux 发行版。
安装指定的 Linux 发行版
bashwsl --install -d <发行版名称>
例如安装 Ubuntu:
bashwsl --install -d Ubuntu
若未指定 -d
,默认安装 Ubuntu。
查看已安装的 Linux 发行版
bashwsl --list --verbose
或者:
bashwsl -l -v
显示所有已安装的 Linux 发行版及其状态(默认、正在运行等)。
设置默认 Linux 发行版
bashwsl --set-default <发行版名称>
例如将 Ubuntu 设为默认:
bashwsl --set-default Ubuntu
启动特定的 Linux 发行版
bashwsl -d <发行版名称>
例如启动 Ubuntu:
bashwsl -d Ubuntu
关闭所有正在运行的 WSL 实例
bashwsl --shutdown
用于强制关闭所有运行的 WSL 实例。
更改 WSL 版本(WSL1 或 WSL2)
bashwsl --set-version <发行版名称> <版本号>
例如,将 Ubuntu 切换到 WSL2:
bashwsl --set-version Ubuntu 2
导出 WSL 发行版
bashwsl --export <发行版名称> <文件路径>
例如导出 Ubuntu:
bashwsl --export Ubuntu D:\wsl-backups\ubuntu-backup.tar
导入 WSL 发行版
bashwsl --import <发行版名称> <安装路径> <备份文件路径>
例如从备份导入 Ubuntu:
bashwsl --import Ubuntu D:\WSL\Ubuntu D:\wsl-backups\ubuntu-backup.tar
查看 WSL 版本
bashwsl --version
显示当前 WSL 的版本信息。
更新 WSL
bashwsl --update
用于更新 WSL 到最新版本,确保获得最新的功能和修复。
设置 WSL 启动时的默认用户
bashwsl --set-default-user <用户名>
例如,将默认用户设置为 xiedong
:
bashwsl --set-default-user xiedong
通过掌握这些指令,您可以更灵活地管理 WSL 环境,提升开发效率。
安装完成后,可以通过以下步骤检查当前 WSL 的版本:
下载并安装 Windows Terminal
查看 WSL 版本
在终端中运行以下命令:
bashwsl --version
示例输出:
bashPS C:\Users\Administrator> wsl --version WSL 版本: 2.2.4.0 内核版本: 5.15.153.1-2 WSLg 版本: 1.0.61 MSRDC 版本: 1.2.5326 Direct3D 版本: 1.611.1-81528511 DXCore 版本: 10.0.26091.1-240325-1447.ge-release Windows 版本: 10.0.19045.2965
或者使用简化命令:
bashwsl.exe -l -v
示例输出:
bashPS C:\Users\Administrator> wsl.exe -l -v NAME STATE VERSION * Ubuntu Running 2
升级到 WSL2(如果尚未)
若发现当前版本不是 WSL2,可以通过以下命令进行升级:
bashwsl --set-version Ubuntu-22.04 2
注意:请将
Ubuntu-22.04
替换为您实际安装的发行版名称。
为了确保 WSL2 环境的稳定和安全,建议进行以下基础配置:
更新软件包列表并升级现有包
bashsudo apt update && sudo apt upgrade -y
安装常用工具
安装基础开发工具和依赖库,以便后续开发使用:
bashsudo apt install build-essential curl wget git -y
在某些情况下,WSL 可能会遇到联网问题,导致无法访问互联网。以下是解决 WSL 联网失败的有效方法:
参考解决方案
安装并运行 wsl-vpnkit
执行以下命令创建一个网络供 WSL 使用:
bashe:
wsl --import wsl-vpnkit $env:USERPROFILE\wsl-vpnkit wsl-vpnkit.tar.gz --version 2
wsl -d wsl-vpnkit --cd /app wsl-vpnkit
说明:上述命令将导入 wsl-vpnkit 发行版并运行,从而为 WSL 创建一个稳定的网络连接。
保持终端运行
每次遇到网络问题时,需运行以下命令:
bashwsl -d wsl-vpnkit --cd /app wsl-vpnkit
提示:请勿关闭该终端窗口,以确保网络连接持续有效。
为了在 WSL2 中进行 C++ 开发,需要安装一系列开发工具和依赖库。以下是详细的安装步骤:
下载 CMake
bashcd ~
wget https://github.com/Kitware/CMake/releases/download/v3.30.3/cmake-3.30.3-linux-x86_64.tar.gz
解压并安装 CMake
bashtar -xzvf cmake-3.30.3-linux-x86_64.tar.gz
sudo ln -sf $(pwd)/cmake-3.30.3-linux-x86_64/bin/* /usr/bin/
验证安装
bashcmake --version
示例输出:
bashcmake version 3.30.3 CMake suite maintained and supported by Kitware (kitware.com/cmake).
添加 GCC 仓库(针对 Ubuntu 版本 < 18.04)
bashsudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt-get update
安装 GCC 和 G++
bashsudo apt-get install gcc -y sudo apt-get install g++ -y
验证安装
bashgcc --version
示例输出:
bashgcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
bashg++ --version
示例输出:
bashg++ (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
安装 GDB
bashsudo apt install gdb -y
验证安装
bashgdb --version
示例输出:
bashGNU gdb (Ubuntu 12.1-0ubuntu1~22.04.2) 12.1 Copyright (C) 2022 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.
为了避免在编译过程中出现缺失依赖的错误,建议安装以下必要的库和工具:
bashsudo apt install build-essential cmake git pkg-config libgtk-3-dev \ libavcodec-dev libavformat-dev libswscale-dev libv4l-dev \ libxvidcore-dev libx264-dev libjpeg-dev libpng-dev libtiff-dev \ gfortran openexr libatlas-base-dev python3-dev python3-numpy \ libtbb2 libtbb-dev libopenexr-dev \ libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev -y
Conan 是一个开源的 C/C++ 包管理器,能够简化依赖管理和构建过程。以下是安装 Conan 的步骤:
安装 Miniconda
bashwget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh
按照提示完成安装后,加载 Conda 环境:
bash. ~/.bashrc
创建 Python 3.7 环境
bashconda create -n py37 python=3.7 -y
激活 Python 环境
bashconda activate py37
安装 Conan
bashpip3 install conan==1.60
注意:确保使用的是 Conan 1.x 版本,以避免与某些项目的不兼容问题。
为了确保 CLion 能够正确识别和使用 WSL2 中的工具链,请按照以下步骤进行检查:
打开 CLion 并配置工具链
验证工具链状态
确保所有工具链组件(如 CMake、GCC、GDB 等)状态均为 ✔,表示配置正确。
置顶WSL的工具链:
在完成开发环境的配置后,可以开始编译 CMake 工程。以下是详细步骤:
清理之前的编译文件
删除旧的编译文件,以确保干净的构建环境,如下图,删除类似这样的老的编译文件:
进入工程的编译目录
bashcd /mnt/e/workcode/cpp_project/layout_analysis_infer/04compile
激活 Python 环境
bashconda activate py37
执行编译脚本
修改一下gcc_linux64.conan文件里gcc的版本,我默认安装的gcc版本是11,所以修改版本为11:
bash[settings]
os=Linux
os_build=Linux
arch=x86_64
arch_build=x86_64
compiler=gcc
compiler.version=11
compiler.libcxx=libstdc++11
build_type=Release
[options]
[build_requires]
[env]
执行编译:
bashbash start_compile_linux64_with_gcc.sh release
脚本将自动进行代码编译和构建,完成后即可在 CLion 中进行调试和运行。
编译过程中会下载外网的一些东西,要么软路由,要么开局域网魔法,比如宿主机器上的:
bashexport http_proxy=101.100.81.102:10829
export https_proxy=101.100.81.102:10829
不开魔法的话,是真的很慢,或许卡到编译不出来。
编译完成后如下图:
在Clion中配置cmake工程路径,点击这里:
填写cmake的构建路径:
设置完确认,然后点击下图这里的重载cmake的构建,无报错则成功:
这个带test的工程是可以执行的:
Linux是依靠这个so在执行:
在Linux编译出Android平台可以使用的so文件包。
下载NDK:
https://developer.android.com/ndk/downloads?hl=zh-cn
我下载版本:https://github.com/android/ndk/wiki
WSL中执行:
bashcd ~
wget https://dl.google.com/android/repository/android-ndk-r27b-linux.zip
sudo apt install unzip -y
unzip android-ndk-r27b-linux.zip
# 或者
wget https://dl.google.com/android/repository/android-ndk-r25c-linux.zip
unzip android-ndk-r25c-linux.zip
声明 ANDROID_NDK_ROOT 环境变量,如下修改成自己的路径
shellexport ANDROID_NDK_ROOT=/home/xiedong/android-ndk-r27b
# 或者
export ANDROID_NDK_ROOT=/home/xiedong/android-ndk-r25c
Clang 是一个用 C++ 编写的编译器前端工具,主要用于编译 C、C++、Objective-C 以及其他语言的代码。它是 LLVM(Low-Level Virtual Machine) 项目的一部分,用来替代 GNU 编译器套件中的 GCC。Clang 的主要目的是提供一个模块化、可扩展且快速的编译器,同时生成高效的代码。它广泛用于各类项目中,尤其是在苹果的 macOS 和 iOS 开发中作为默认的编译器工具链。
进入04compile目录
shellcd 04compile
android_armv8.conan:
bash[settings]
arch=armv8
build_type=Release
compiler=clang
compiler.libcxx=c++_static
compiler.version=14
os=Android
os.api_level=21
[tool_requires]
android-ndk/r25c
[options]
[env]
运行脚本编译:
shellbash start_compile_android_with_armv8.sh
这文件就是编译出的so文件:
Conan 是一个跨平台的 C/C++ 包管理器,旨在帮助开发者管理项目依赖,解决复杂的依赖问题。它支持多种构建系统(如 CMake、MSBuild 等)和编译器(如 GCC、Clang、Visual Studio 编译器等),并且允许用户轻松地下载、构建和集成第三方库。
conanfile.txt
或 conanfile.py
文件定义项目的依赖项,并自动处理依赖树。conan install
下载并安装依赖。conan create
构建并发布自己的包。conan profile
设置编译环境。conan search
查找所需包。conan upload
将包发布到远程仓库。conan install:安装项目依赖
bashconan install .
--build=missing
:自动从源代码构建缺失的包。--profile=<profile_name>
:使用特定配置文件。conan create:创建和构建包
bashconan create . user/channel
--build
:强制重新构建包。conan search:搜索本地或远程包
bashconan search <package_name>
-r <remote_name>
:指定远程仓库进行搜索。conan upload:上传包到远程仓库
bashconan upload <package_name>/<version>@<user>/<channel> -r <remote_name>
--all
:上传包的所有版本。--confirm
:无需确认直接上传。conan remove:删除本地或远程的 Conan 包
bashconan remove <package_name>/<version>@<user>/<channel>
-f
:强制删除,无需确认。--remote <remote_name>
:删除远程包。bashconan remove "*" -f
conan profile:管理编译配置文件
bashconan profile new <profile_name> --detect conan profile update settings.compiler=gcc <profile_name>
new
:创建新配置文件。update
:更新配置文件设置。conan config:管理全局设置
bashconan config set general.revisions_enabled=1
conan config list
conan remote:管理远程仓库
bashconan remote add <remote_name> <remote_url> conan remote remove <remote_name> conan remote list
典型的 conanfile.txt
示例:
ini[requires]
boost/1.75.0
fmt/7.1.3
[generators]
cmake
[options]
boost:shared=True
典型的 conanfile.py
示例:
pythonfrom conans import ConanFile, CMake
class HelloConan(ConanFile):
name = "hello"
version = "1.0"
settings = "os", "compiler", "build_type", "arch"
requires = "boost/1.75.0", "fmt/7.1.3"
generators = "cmake"
def build(self):
cmake = CMake(self)
cmake.configure()
cmake.build()
conanbuildinfo.txt 是由 Conan 生成的文件,主要用于保存编译项目所需的依赖路径和配置信息。它包含了所依赖的库的头文件路径、库文件路径、编译选项、宏定义等信息。在编译过程中,这些信息会被编译器和链接器使用,以便正确地找到和链接依赖的库。
conan remove "*" -f
会删除所有本地的Conan包。也就是/home/xiedong/.conan/data下面的东西。
通过本文的详细步骤,您已经成功在 Windows 10 上安装并配置了 WSL2 环境,并搭建了完整的 C++ 开发环境。WSL2 不仅提升了开发效率,还为跨平台开发提供了便利。希望这篇指南对您的开发之路有所帮助!
如有任何问题或建议,欢迎在下方留言交流。
本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!