1. 基于MSYS2的Mingw-w64 GCC搭建Windows下C++开发环境

在Widndows10系统上,使用gcc工具链(g++)进行C++程序开发?可以的!本文将就如何搭建这样一个环境,展开介绍。

  • Windows下C/C++程序开发的差劲开发体验
    • 首先需要安装≈20 GB的Visual Studio(大型团队项目,还是需要VS的);
    • 然后,很多第三方库,需要自己去GitHub或者相应的官网上下载源码,然后进行编译,而编译过程会遇到各种版本不兼容、缺少依赖、代码错误、需修改makefile文件等问题……至此库尚未编译成功,开发人员早已经被这差劲的体验劝退……
  • MSYS2有三个优点
    • 仿Linux的终端交互环境,可以使用Linux下的终端命令和快捷方式;

    • 自带pacman软件管理包,让您将精力放到C++代码的编写上,而不是复杂的依赖环境的搭建和编译。如:GDAL、OpenCV等第三方C/C++库,无须再去踩各种坑、艰难地编译而是直接一个命令就安装到了本地;

    • 复用自己在Linux下的开发经验。使用g++进行库的链接、源码编译等操作,可更进一步了解C++代码的编译过程。

1.下载MSYS2

  • 点击链接https://www.msys2.org/,进入MSYS2的官网,然后找到如下图下载链接,点击即可进行下载。
    在这里插入图片描述

2.安装MSYS2

  • 如下图,MSYS2的整个安装过程无须特别的设置,一路默认下一步即可。注:本文的2、4、5三个步骤,包括安装MSYS2、更新pacman基本软件仓库、安装Mingw-w64 GCC编译工具链,均可参照MSYS2官网进行。(本文也是参考MSYS2的官网)
    在这里插入图片描述

3.配置pacman镜像源

  • pacman是随MSYS2一起安装的软件包管理工具,后边小编将有专门的文章来介绍pacman的基本使用方法。

  • 安装完成MSYS2后,如果您是按默认路径来安装的,则可以在如下路径找到4个镜像配置文件:C:\msys64\etc\pacman.d,分别是:“mirrorlist.mingw32”、“mirrorlist.mingw64”、“mirrorlist.msys”、“mirrorlist.ucrt64”,如下图使用打开4个镜像源配置文件,然后进行配置,配置前后的结果如下面两幅图所示。这里说的配置,其实就是将配置文件内的两个国内的镜像源“tsinghua(清华)”和“ustc(中科大)”,移动(剪切粘贴)到主镜像(## Primary标识的msys2)的前面
    在这里插入图片描述
    在这里插入图片描述

4.更新panman基本软件仓库

  • 配置完镜像源后,需要更新pacman的基本软件仓库,这分两个步骤:

  • 第一步,执行如下命令,检查更新并下载,过程中,MSYS2可能会因为安装更新而自动关闭,此时,可再次在开始菜单中打开,然后再次执行“pacman -Syu”命令

pacman -Syu

在这里插入图片描述

  • 第二步,确定“pacman -Syu”命令的更新完毕,如下图,则说明更新完毕,然后执行如下命令,以更新因执行上已更新操作,而未更新的剩余程序。
pacman -Su

在这里插入图片描述

5.安装Mingw-w64 GCC编译工具链

  • Mingw-w64是Windows编译C/C++源代码的程序集,为了安装该软件,须执行如下命令,即可安装编译C/C++程序所需的编译工具如:gcc、g++、make等。此步骤安装的软件包较多,因此可能需要一定时间,取决于网络和电脑配置,约需3-5分钟。
pacman -S --needed base-devel mingw-w64-x86_64-toolchain

在这里插入图片描述
在这里插入图片描述

  • 为了方便在终端中编辑文件,这里推荐安装一个vim软件,使用如下命令即可进行安装:
pacman -S vim

在这里插入图片描述

6.使用Mingw-w64 g++编译第一个C++代码

  • 安装完GCC工具链后,即可关闭MSYS2终端软件。此时,如下图,在开始菜单中找到MinGW64终端软件并打开。相信广大读者使用的电脑都是64位的硬件和Windows10系统了,因此,为了编译的程序能够在64位上的Windows10系统下运行,以后都将使用MSYS2下的“MinGW 64”终端进行C/C++第三方库的安装、C/C++代码的编译
    在这里插入图片描述

  • 在MinGW 64终端(Linux命令执行必须在此终端)中,使用cd命令,切换到/opt/目录下,然后使用vim命令,打开一个文件,并编写如下代码(可复制后,然后在vim中,按住Shit键,鼠标右键,选择Paste即可),然后以“:wq test_g++_win.cpp”命令保存文件并退出。(也可以在VS Code中新建一个cpp文件,然后编写如下的代码,最后保存至“C:\msys64\opt”目录下,这与vim命令操作的结果一致)

// Source File:/opt/test_g++_win.cpp

#include <iostream>

int main(int argc, char *argv[])
{
    std::cout << "Hello g++ for Windows10!" << std::endl;
    return 0;
}

在这里插入图片描述
在这里插入图片描述

  • 编写好上述代码并保存后,同样是在MinGW 64终端(编译必须在此终端)中,使用如下命令编译该C++源代码,即可在源代码的同目录下,生成一个名为“test_g++_win.exe”的程序,如下图所示。
g++ test_g++_win.cpp -o test_g++_win

在这里插入图片描述

  • 如上图所示,在MinGW 64终端中,输入如下命令运行“test_g++_win.exe”可执行程序,回车后即可看到相应的输出(如下图),是符合符合预期的。
./test_g++_win
### 解析 Import Error 的常见原因 当遇到 `ImportError: cannot import name 'Generic'` 错误时,通常意味着尝试从模块中导入的对象不存在或无法访问。此问题可能由多种因素引起: - 版本不兼容:不同库之间的版本冲突可能导致此类错误。 - 安装缺失:目标库未正确安装或路径配置有误。 - 导入语句不当:可能存在循环依赖或其他语法层面的问题。 ### 针对 Generic 类型的具体解决方案 对于特定于 `Generic` 的情况,考虑到 Python 中 `Generic` 是 typing 模块的一部分,在处理该类别的 ImportError 时可采取如下措施[^1]: #### 方法一:确认typing模块可用性 确保环境中已安装标准库中的 typing 模块,并且其版本支持所使用的特性。可以通过以下命令验证: ```bash python -c "from typing import Generic; print(Generic)" ``` 如果上述命令执行失败,则可能是由于 Python 或者相关扩展包的版本过低造成的。此时应考虑升级至更高版本的解释器以及对应的开发工具链。 #### 方法二:调整导入方式 有时直接通过顶层命名空间来获取所需组件会更稳定可靠。修改代码以采用这种做法可能会解决问题: ```python from collections.abc import Iterable # 如果是迭代器相关接口 from typing import TypeVar, Protocol # 对于协议和泛型定义 T = TypeVar('T') class MyContainer(Protocol[T]): ... ``` 注意这里并没有显式提到 `Generic` ,而是利用了更为基础的数据结构抽象基类或是其他替代方案实现相同功能[^2]。 #### 方法三:排查环境变量设置 检查系统的 PYTHONPATH 和虚拟环境配置是否正常工作。任何异常都可能导致某些第三方软件包找不到必要的资源文件而引发类似的错误提示。建议清理并重建项目专属的工作区以便排除干扰项的影响。 #### 示例修正后的代码片段 假设原始代码试图这样引入 `Generic` : ```python from some_module import Generic # 可能导致 ImportError ``` 改为遵循官方文档推荐的方式后变为: ```python from typing import Generic # 正确的做法 ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值