Msys2记录

article/2025/8/15 6:14:17

MSYS2

​ MSYS2是MSYS的升级版,集成了pacman和Mingw-w64的Cygwin升级版,提供了Mingw-w64的GNU工具,包括GCC,同时移植了Arch Linux的软件包管理系统pacman,具备了Cygwin的POSIX API,理论上在Linux上的程序使用Cygwin重新编译就可以在Windows上运行。

​ Cygwin可以带给我们像Bash、Autotools、make、git、gcc、gdb上的Linux平台工具。Cygwin编译的程序不是太兼容原生的Windows程序,但是有了mingw之后编译的程序可以很好的相互兼容。

环境介绍
  • MSYS2包含了许多环境/子系统,首先我们需要做的就是决定使用哪一个环境,默认建议采用MINGW64环境。各个环境之间的差异就是默认的编译器、链接器不同。

  • MSYS环境包含了unix-linke/cygwin(提供 Linux Programming API)基础工具,主要位于/usr环境下。所有其他的环境像mingw64、mingw32之类的环境都是基于MSYS环境。比如MINGW64的$PATH

    image-20220126221348554

    image-20220126221617129

Architecture
  • x86_64 -> (64 bit)
  • i686
  • aarch64
C Library
  • ucrt

    Universal C Runtime is a newer version which is also used by Microsoft Visual Studio by default. It should work and behave as if the code was compiled with MSVC.

  • msvcrt

    Microsoft Visual C++ Runtime is available by default on all Microsoft Windows versions, but due to backwards compatibility issues is stuck in the past, not C99 compatible and is missing some features.

  • cygwin

C++ Library
  • libstdc++

    ​ libc++ is part of clang project.They are compatible for C++17 and older versions, but C++20 implementation is not ready, so they have differences in implemented features, we’ll have to wait until they are done.

  • libc++

    ​ libstdc++ is part of GCC project.They are compatible for C++17 and older versions, but C++20 implementation is not ready, so they have differences in implemented features, we’ll have to wait until they are done.

Toolchain

坦白讲这里的toolchain实际上是Group Packages。

  • mingw-w64-clang-aarch64-toolchain -> clangarm64
  • mingw-w64-clang-i686-toolchain -> clang32
  • mingw-w64-clang-x86_64-toolchain -> clang64
  • mingw-w64-i686-toolchain -> mingw32
  • mingw-w64-x86_64-toolchain -> mingw64
  • mingw-w64-ucrt-x86_64-toolchain -> ucrt64
  • mingw-w64-cross-clang-toolchain -> 这里的交叉编译实际上是64位和32位之间的编译
  • mingw-w64-cross-toolchain
  • mingw-w64-cross-ucrt-toolchain
  • GCC Toolchain based environment

    MSYS(x86_64) MINGW64(x86_64) MINGW32(i686) UCRT64(x86_64)

    use the GNU linker and the GNU C++ library. LD Linker,libstdc++

  • LLVM Toolchain based environment

    CLANG32(i686) CLANG64(x86_64) CLANGARM64(aarch64)

    only use LLVM tools,LLD is faster than LD, but does not support all the features LD supports LLD linker,libc++

路径转换

​ Cygwin是一个在windows上使用模拟Linux工具的小型系统。msys2结合pacman和cygwin生成了多套构建工具。但是就是由于Unix和Windows环境区别,其路径是需要转换的。

  • 自带cygpath转换
cygpath -u C:\\foo # /c/foo 				    windows => unix path
cygpath -m /mingw64/bin # C:/msys64/minw64/bin  unix path => windows
cygpath -w /mingw64/bin # C:\msys64\mingw64\bin unix path => windows
  • python脚本转换
python3 -c "import sys; print(sys.argv)" --dir=/foo:/bla # \\版本Windows路径
MSYS2_ARG_CONV_EXCL='--dir=' python3 -c "import sys; print(sys.argv)" --dir=/foo # 除去--dir=开头的参数不进行转换
MYVAR=/foo python3 -c "import os; print(os.environ['MYVAR'])" # /版本Windows路径
MYVAR=/foo:/bar python3 -c "import os; print(os.environ['MYVAR'])" # \版本Windows路径
MSYS2_ENV_CONV_EXCL='MYVAR' MYVAR=/foo python3 -c "import os; print(os.environ['MYVAR']) # 禁止转换行为
Pacman

​ 由C语言写成的工具,二进制包采用tar.zst for zstd compression,采用.pkg作为前缀暗示其为Pacman包,.pkg.tar.zst

文件系统
PathscONTENTS
/bin,/dev,/home,/opt,/proc,/tmp,/varessential POSIX stuff
/usr,/etcmsys2 system
/mingw32,/mingw64mingw system
/c,/d,…mount points for Windows drives
/.xml,/maintenancetool.(un)installer
/aurebase.bat,/msys2_shell.cmd,/msys2.icoshell entry points
配置LinSAR环境
@REM Make sure start with ucrt64 msys2 env
pacman -Syu # 更新基础包
pacman -S mingw-w64-ucrt-x86_64-cmake mingw-w64-ucrt-x86_64-gcc mingw-w64-ucrt-x86_64-gdb mingw-w64-ucrt-x86_64-ninja mingw-w64-ucrt-x86_64-qt-creator mingw-w64-ucrt-x86_64-qt5 mingw-w64-ucrt-x86_64-opencv mingw-w64-ucrt-x86_64-cgal mingw-w64-ucrt-x86_64-boost mingw-w64-ucrt-x86_64-gdal mingw-w64-ucrt-x86_64-proj mingw-w64-ucrt-x86_64-glog mingw-w64-ucrt-x86_64-ceres-solver mingw-w64-ucrt-x86_64-geographiclib mingw-w64-ucrt-x86_64-libtiff mingw-w64-ucrt-x86_64-laszip mingw-w64-ucrt-x86_64-nlohmann-json mingw-w64- --needed@REM Default Eigen 3.4.0 conflict with ceres solver
pacman -U https://mirror.msys2.org/mingw/ucrt64/mingw-w64-ucrt-x86_64-eigen3-3.3.9-1-any.pkg.tar.zst
pacman安装包组件介绍
相关网址
  • mingw-w64网址
  • mingw-w32网址
  • msys网址
  • clang32网址
  • clang64网址
  • clangarm64网址
  • ucrt64网址

image-20220126151030027

pacman 安装某个包可以像Anaconda cloud 一样进行安装,详情参考网址

查询所有安装包
pacman -Ss mingw-w64-x86_64 sqlite # arch + package name
列表显示包
  • 显示数据库中的包
pacman -Si meson | grep '^Licenses' # 匹配指定字段和信息,中文需要采用中文进行匹配
  • 列表显示已经安装的包
pacman -Qi meson | grep '^Licenses' # 匹配指定字段和信息,中文需要采用中文进行匹配
  • 显示安装包的文件路径
pacman -Ql meson | grep -E "/share/licenses/.+/.+" # 指定路径下的文件
显示安装包所有的安装内容
pacman -Ql <name of the package> # 显示所有文件
查询已经安装的包
pacman -Qs mingw-w64-x86_64 sqlite # arch + package name
安装包
pacman -S <name of the package> 
# msys2-launcher-git -> virtual package names
pacman -S <virtual package names and package group names> # base-devel -> package group names
pacman -Ss <name_pattern> # 正则匹配方式安装
pacman -U <packagefile.tar.zst> # 安装独立的包,需要自己解决依赖,可以是.zst或者.xz结尾
pacman -U <packagefile.tar.xz>
移除包
package -R <name of the package> # but not its dependencies nor any files produced by running it
图形显示包依赖
pactree mingw-w64-x86_64-gettext

image-20220127214828501

显示直接依赖
pacman -Qi mingw-w64-x86_64-gettext

image-20220127214718990

找出文件属于哪一个包
pacman -Qo <full file path> # 大小写敏感、需要带后缀、只查找已经安装的包
找出哪个包将安装的文件
# 注意大小写、后缀名
pacman -Fy # update package database
pacman -F <filename> # 从远程仓库中进行查找
pacman -Fx <filename> # 子字符串匹配
Windows配置
更新包数据库和基础包
pacman -Syuu
更新基础包
pacman -Suu # 更新剩余的包
安装cygwin基础包
pacman -S vim
安装mingw-w64 GCC
pacman -S --needed base-devel mingw-w64-x86_64-toolchain
安装cmake
pacman -S mingw-w64_x86_64-cmake
  • 安装过程分析
    • 解析依赖环境
    • 查找与现有软件包的冲突
    • 验证安装
  • image-20220125150333957
查看是否安装某个包
pacman -Qi mingw-w64-x86_64-cmake-doc-qt # 查看详细信息
pacman -Q mingw-w64-x86_64-cmake-doc-qt # 查看安装基本信息
源码配置为pacman包
  • msys配置基础开发包

    pacman -S --needed base-devel
    
  • 撰写属于自己的PKGBUILD

    makepkg-mingw --cleanbuild --syncdeps --force --noconfirm # 生成*.pkg.tar.zst包
    

    makepkg-mingw只是makepkg的一个封装,它能为不同的环境构建相同的包多次。这点与Arch Linux稍微有点不同。

    注意License的安装msys约定为/share/licenses//

  • 安装生成的包到本地

    pacman -U *.pkg.tar.zst # 该包可以是网址
    

    image-20220128193813929

  • 补充

    makepkg-mingw 还有如下有用的选项

    • –install 在build完成之后立刻进行安装
    • –rmdeps 移除安装所需要的所有依赖
    • –help 更多的选项
tips
安装pacman包技巧

​ 由于各个环境有属于自己的包前缀。因此,需要一个技巧可以解决上述的问题,即只需要使用后缀就可以安装。

pacman -S pactoys # 安装工具
pacman -S cmake:x # x64_x86 architecture
pacman -S cmake:m # i686 and x64_86 architecture
pacman -S cmake:i # i686 architecture
pacman -S cmake:p # ucrt environment
MSYS2中使用CMake
cmake -G Ninja # 使用ninja
cmake -G "MSYS Makefiles" # 使用cygwin的make工具
cmake -G "MinGW Makefiles" # 使用mingw32-make工具生成
配置镜像

​ msys2的主仓库服务器位于德国,包含了许多pacman数据库和包数据。该主服务器同步到全世界其他镜像服务器中进行发布。

  • 主仓库

    repo.msys2.org # rsync https
    mirror.msys2.org # 根据位置重定向到Tier 1适合的镜像
    
  • Tier 1 Mirrors

    每天至少从主仓库拉取一次,非常可靠和高速。中国的哈尔滨工业大学、南京大学、中国科大、北京外国语都有 Tier 1 镜像站。

  • Tier 2 Mirrors

    定期更新一次,阿里云有 Tier 2 镜像站,上海交大有

Python

​ 由于Mingw版本的cpython不兼容正常版本的cpython,所以msys2社区维护了一个mingw版本的python。这意味着pypi安装不再可靠,所有的Python相关包需要使用mingw版本的python进行重新编译之后方可使用。

Reinstall msys2系统
  • 输出安装包到文本文件中

    pacman -Qqe | xargs echo > /d/packages.txt ; exit # 导出所有的包并退出shell 
    
  • 移动原系统缓存保存再卸载原版本msys2系统

    msys64/var/cache/pacman/pkg -> 替换为 msys64.old/var/cache/pacman/pkg
    
  • 更新包数据源

    pacman -Sy # 更新数据源
    pacman --needed -S bash pacman pacman-mirrors msys2-runtime # 更新核心组件
    
  • 安装之前系统的包

    pacman -S --needed $(cat /d/packages.txt)
    
Porting
  • mingw32-make

    msys2提供了两套系统make系统,一套系统是原生的make,即cygwin类Unix系统,一套是mingw32-make工具,make适用于大部分的Makefile,mingw32-make(GNU make)只适用于自己的Makefile。

  • 使用GNU make检测MSYS版本

    msys_version := $(if $(findstring Msys, $(shell uname -o)),$(word 1, $(subst ., ,$(shell uname -r))),0)
    $(info The version of MSYS you are running is $(msys_version) (0 meaning not MSYS at all))
    
  • 代码中的站台检查

    Identifierplatformsusage
    _WIN32mingw,msvcC code (#ifdef ...)
    _WIN6464-bit mingw,64-bit msvcC code (#ifdef ...)
    _CYGWIN_msys2,cygwinC code (#ifdef ...)
    _MSYS_msys2C code (#ifdef ...)
    x86_64-pc-msys264-bit msys2Build scripts (if [ $host = '...' ])
    i686-pc-msys232-bit msys2Build scripts (if [ $host = '...' ])
    x86_64-w64-mingw3264-bit mingwBuild scripts (if [ $host = '...' ])
    i686-w64-mingw3232-bit mingwBuild scripts (if [ $host = '...' ])
    cygwinmsys2Python (sys.platform)
    win32mingwPython (sys.platform)

= ‘…’ ]) | | x86_64-w64-mingw32 | 64-bit mingw | Build scripts (if [ $host = ‘…’ ]) | | i686-w64-mingw32 | 32-bit mingw | Build scripts (if [ $host = ‘…’ ]) | | cygwin | msys2 | Python (sys.platform) | | win32 | mingw | Python (sys.platform`) |


http://chatgpt.dhexx.cn/article/Ndpd9Zgh.shtml

相关文章

msys2在windows10系统的安装

测试系统: windows 10 首先需要msys2的安装包,可以去官网下载安装包 官网地址: http://www.msys2.org/ 本次下载的是 msys2-x86_64-20180531.exe 注意:1.msys2不可以安装在FAT*分区    2.msys2不能安装在win XP系统上 1.双击msys2-x86_64-20180531.exe,并点击下一步选择安…

MSYS2使用教程——win10系统64位安装msys2最新版(msys2-x86_xxxx.exe)

一、安装 测试系统: windows 10 首先需要msys2的安装包,可以去官网下载安装包 官网地址: http://www.msys2.org/ 本次下载的是 msys2-x86_64-latest.exe 注意: 1. msys2不可以安装在FAT*分区 2. msys2不能安装在win XP系统上 指定好安装路径&#xff08;一般D根目录即可&#…

初步使用MSYS2

在此镜像站点下载&#xff0c; https://mirror.tuna.tsinghua.edu.cn/help/msys2/ 根据资料&#xff0c; MSYS2 &#xff08;Minimal SYStem 2&#xff09; 是一个MSYS的独立改写版本&#xff0c;主要用于 shell 命令行开发环境。同时它也是一个在Cygwin &#xff08;POSIX …

超详细教程:windows安装MSYS2(mingw gcc)——更新于2021.11

目录 安装 MSYS2官网&#xff1a;https://www.msys2.org/ 安装 下载安装程序&#xff08;官网首页有&#xff09;&#xff1a;msys2-x86_64-20210725.exe 或 CSDN&#xff1a;https://download.csdn.net/download/ymzhu385/45988277运行安装程序。MSYS2 需要 64 位 Windows 7…

Argparse 教程

官方文档 argparse --- 命令行选项、参数和子命令解析器 — Python 3.10.2 文档 别人的笔记Argparse 教程 — Python 3.10.2 文档https://docs.python.org/zh-cn/3/howto/argparse.html#id1完整的argparse的API argparse --- 命令行选项、参数和子命令解析器 — Python 3.8…

python argparse

argparse 模块可以让人轻松编写用户友好的命令行接口。程序定义它需要的参数&#xff0c;然后 argparse 将弄清如何从 sys.argv 解析出那些参数。 argparse 模块还会自动生成帮助和使用手册&#xff0c;并在用户给程序传入无效参数时报出错误信息。 使用argparse从命令行传入参…

python argparse type_python argparse详解

1.argparse模块作用 用于解析命令行参数 2.位置参数和可选参数 运行以下代码: import argparse parser = argparse.ArgumentParser() args = parser.parse_args() 运行结果: 参数为-h或--help时,parser.parse_args()会输出命令行的位置参数position arguments和可选参数opti…

Python3中使用argparse模块解析命令行参数

argparse是Python的一个标准模块&#xff0c;用于解析命令行参数&#xff0c;即解析sys.argv中定义的参数。实现在&#xff1a;https://github.com/python/cpython/blob/main/Lib/argparse.py argparse模块还会自动生成帮助和使用信息&#xff0c;即在最后加-h或--help。当用户…

argparse教程

argparse教程 argparse是用来干什么的&#xff1f;位置参数和可选参数测试argparse的功能test1test2test3test4test5-可选参数test6-action选项test7-短选项test8-同时使用位置参数和可选参数test9test10-限定参数的取值范围test11-action"count"test12-None无法和in…

argparse 模块详解

文章目录 1. argparse 模块简介2. 未使用argparse示例3. 使用argparse示例3.1 argparse简单示例3.2 argparse进阶示例3.2.1 可选参数设置3.2.2 可选参数引用名3.2.3 清除帮助中的参数名信息3.2.4 必选参数设置3.2.5 列表参数&#xff08;多参数&#xff09;传入设置3.2.6 互斥参…

python中的argparse基本用法

1、argparse是一个python模块&#xff0c;用途是&#xff1a;命令行选项、参数和子命令的解释。 2、使用步骤&#xff1a; 导入argparse模块&#xff0c;并创建解释器添加所需参数解析参数 3、用法示例&#xff1a; import argparse# 1.创建解释器 parser argparse.Argume…

argparse简介

一、argparse简介 argparse 模块是 Python 内置的用于命令项选项与参数解析的模块&#xff0c;argparse 模块可以让人轻松编写用户友好的命令行接口&#xff0c;能够帮助程序员为模型定义参数。 argparse定义四个步骤 导入argparse包 ——import argparse创建一个命令行解析…

绕过tp路由器管理密码_TP LINK路由器的登陆网址是什么?

旧版本的TP-Link路由器的登陆网址是&#xff1a;192.168.1.1&#xff1b;新版本的TP-Link路由器的登陆网址是&#xff1a;http://tplogin.cn&#xff1b;TP-Link迷你路由器的登陆网址是&#xff1a;192.168.1.253。接下来详细介绍&#xff1a; 一、旧版本的TP-Link路由器的登陆…

【TP5.1】Config的用法

需要读取某个一级配置的所有配置参数&#xff0c;可以使用 需要引入 use Config; 使用助手函数&#xff1a; config(app.name) config(app.); 这种类型的使用app. 这种类型的使用.code即可

TP LINK GRE L2TP介绍

(Virtual Private Network, 虚拟专用网络)是一个建立在公用网&#xff08;通常是因特网&#xff09;上的专用网络&#xff0c;但因为这个专用网络只是逻辑存在并没有实际物理线路&#xff0c;故称为虚拟专用网。 随着因特网的发展壮大&#xff0c;越来越多的数据需要在因特网上…

百信计算机管理员登录账号密码,tplogin.cn管理员密码是多少 | 192路由网

TP-Link TL-WR745N无线路由器配置简单&#xff0c;不过对于没有网络基础的用户来说&#xff0c;完成路由器的安装和无线网络密码和名称的设置&#xff0c;仍然有一定的困难&#xff0c;本文www.192luyou.com介绍TP-Link TL-WR745N无线路由器无线网络密码和名称的设置方法! TP-L…

Tplmap用法

Tplmap下载&#xff1a;安装包可查看我的下载资源页面 Python环境&#xff1a;2.7 (这一点很重要很重要很重要) Python所需要的包&#xff1a; PyYAML5.1.2 certifi2018.10.15 chardet3.0.4 idna2.8 requests2.22.0 urllib31.24.1 wsgiref0.1.2 &#xff08;这些包只有在pyth…

TPlinker解读

参考&#xff1a; 关系抽取之TPLinker解读加源码分析 TPLinker 实体关系抽取代码解读 实体关系联合抽取&#xff1a;TPlinker TPLinker中文注释版 Tagging TPLinker模型需要对关系三元组(subject, relation, object)进行手动Tagging&#xff0c;过程分为三部分&#xff1a; &…

TP6中GatewayWorker的用法

一、参考网站 tp开发手册&#xff1a;https://www.kancloud.cn/manual/thinkphp6_0/1147857 workman与tp框架结合参考&#xff1a;http://doc2.workerman.net/work-with-other-frameworks.html 开发手册只介绍了Workman的使用方法&#xff0c;没有介绍GatewayWorker的使用方…

tp5框架Fastadmin中的Log日志如何去用

首先fastadmin是基于tp5的框架进行开发,在我们使用fastadmin写好接口后,接口在测试时没有任何问题,当前端进行访问时却无法进行交互,这是就可以使用tp5框架自带的Log日志; 下面就为大家介绍Log的使用: use think\Log; 在你使用的php文件下引入Log日志。 Log的使用方法: 一…