搭建msys2基础开发平台

article/2025/9/11 9:57:32

1.环境搭建

最近msys2的软件源进行了更新,一些低版本的软件都没有了,gcc只有9.3以上版本,gdb只有9.1以上版本,没有低版本,那以后只能跟着软件源的最新版本走了,如果碰到软件依赖版本不兼容将会是一个非常棘手的问题,而且gcc和gdb正在狂热的将c代码都替换为c++,但是我本人不太喜欢c++,所以尝试搭建一个不依赖软件源的平台。

清华和腾讯开源镜像都已经随着官方的源更新了,幸好华为和浙大的镜像还没更新,但是迟早也会更新的,所以在他们更新之前赶紧把这个事情做了。

基础安装包,我用的是msys2-base-x86_64-20190524.tar.xz,解压即可,先把/etc/pacman.d的镜像源都注释掉,不要在线安装,全部选择把包下载到本地离线安装(以后不一定还能下到低版本的包,接下来的一步就是安装gcc,我用的是gcc-7.4.0-1-x86_64.pkg.tar.xz,msys2进入到包所在目录,执行

pacman -U gcc-7.4.0-1-x86_64.pkg.tar.xz

出现下列窗口
在这里插入图片描述
先按n不要安装,去华为镜像找到对应的版本的包都下下来,源码最好也下一下,进到包所在目录安装

pacman -U binutils-2.30-1-x86_64.pkg.tar.xz isl-0.19-1-x86_64.pkg.tar.xz mpc-1.1.0-1-x86_64.pkg.tar.xz msys2-runtime-devel-3.0.7-2-x86_64.pkg.tar.xz msys2-w32api-headers-7.0.0.5454.19e51f59-1-x86_64.pkg.tar.xz msys2-w32api-runtime-7.0.0.5454.19e51f59-1-x86_64.pkg.tar.xz windows-default-manifest-6.4-1-x86_64.pkg.tar.xz

接下来就可以去装gcc了:

pacman -U gcc-7.4.0-1-x86_64.pkg.tar.xz

接下来装make

pacman -U make-4.2-1-x86_64.pkg.tar.xz

接下来装gdb
在这里插入图片描述
同样先不要安装,把依赖包都下载到本地后安装

pacman -U expat-2.2.6-1-x86_64.pkg.tar.xz gdbm-1.18.1-2-x86_64.pkg.tar.xz libgdbm-1.18.1-2-x86_64.pkg.tar.xz python2-2.7.16-1-x86_64.pkg.tar.xz

运行gdb后如果出现下面这个错误

#gdb -v D:/d/msys64/usr/bin/gdb.exe: error while loading shared
libraries: msys-readline6.dll: cannot open shared object file: No such
file or directory

需要把readline降级为libreadline-6.3版本

pacman -U libreadline-6.3.008-7-x86_64.pkg.tar.xz

这样gdb可以用了,但是此后使用pacman命令会出现了下面这个错误

错误:GPGME 错误:无效的加密引擎
错误:GPGME 错误:无效的加密引擎
错误:GPGME 错误:无效的加密引擎
错误:数据库 'mingw32' 无效 (无效或已损坏的数据库 (PGP 签名))
错误:数据库 'mingw64' 无效 (无效或已损坏的数据库 (PGP 签名))
错误:数据库 'msys' 无效 (无效或已损坏的数据库 (PGP 签名))

这个问题是不可逆,仔细想一下,原始包里的是msys-readline8.dll,安装后msys-readline8.dll被删替换为msys-readline6.dll,这样大量依赖msys-readline8.dll的软件都不能使用,包括pacman。所以一种补救的方法是把msys-readline8.dll从原始包里重新拷贝到/usr/bin里。其实最好的方法是之前就不要安装libreadline-6.3,直接把msys-readline8.dll拷贝一份改名为msys-readline6.dll。

这样就搭建好了最基本的环境,接下来分别去源码编译gdb、gcc和gdb来验证环境的可用性。

2.gdb源码编译

编译的版本是7.9,因为我以前编译过,所以坑就不走,直接一步到位,先下载依赖包然后一次性安装

pacman -U gettext-devel-0.19.8.1-1-x86_64.pkg.tar.xz libexpat-devel-2.2.6-1-x86_64.pkg.tar.xz libiconv-devel-1.15-1-x86_64.pkg.tar.xz liblzma-devel-5.2.4-1-x86_64.pkg.tar.xz libreadline-devel-8.0.000-1-x86_64.pkg.tar.xz ncurses-devel-6.1.20180908-1-x86_64.pkg.tar.xz zlib-devel-1.2.11-1-x86_64.pkg.tar.xz patch-2.7.6-1-x86_64.pkg.tar.xz

把gdb-7.9-2.src.tar.gz 解压后进入目录,执行
makepkg --skippgpcheck

本来不想踩坑的,还是踩到了,出现如下错误

checking for XML_StopParser… yes checking whether to use python…
/usr/bin/python2 checking for python2.7… no configure: error: no
usable python found at /usr/bin/python2 make[1]: ***
[Makefile:8648:configure-gdb] 错误 1 make[1]:
离开目录“/d/source/gdb-7.9-2/src/gdb-7.9” make: *** [Makefile:841:all] 错误
2
==> 错误: 在 build() 中发生一个错误。
正在放弃…

之前装的python2-2.7.16版本太高了,要装python2-2.7.13的版

再编译就能成功了,可执行文件都生成了,但是check()出错,所以无法打包,可以把check()里面的make check注释掉

3.gcc源码编译

第一步还是先安装所有依赖包

pacman -U gmp-devel-6.1.2-1-x86_64.pkg.tar.xz mpc-devel-1.1.0-1-x86_64.pkg.tar.xz mpfr-devel-4.0.2-1-x86_64.pkg.tar.xz isl-devel-0.19-1-x86_64.pkg.tar.xz diffutils-3.5-1-x86_64.pkg.tar.xz

然后进入gcc-7.4.0-1.src.tar.gz源码解压后的目录,执行
makepkg --skippgpcheck

编译时还是出现这个老问题

mv: 无法将'gcc' 移动至'stage1-gcc': Permission denied
mv: 无法将'gcc' 移动至'stage1-gcc': Permission denied
mv: 无法将'gcc' 移动至'stage1-gcc': Permission denied
make[4]: *** [Makefile:21569:stage1-end] 错误 1
make[4]: 离开目录“/d/source/gcc-7.4.0-1/src/build-x86_64”
mv: 无法将'gcc' 移动至'stage1-gcc': Permission denied
mv: 无法将'gcc' 移动至'stage1-gcc': Permission denied
make[4]: *** [Makefile:21569:stage1-end] 错误 1

有的电脑行,有的电脑死活不行,但是不管怎么样,反正都在build-x86_64\gcc生成了xgcc.exe和cc1.exe文件,有这2个就可以编译了。

重新用gcc-7.3.0-1的包试了一下是可以编译并安装成功的。经过反复的验证并不是版本的问题,gcc-7.3之所以能成功是因为我把PKGBUILD中的make改为了make -j24,这样之后其他版本也能成功了,电脑多少核就用多少核编译。

现在来编译mingw-w64-gcc-7.4.0-1.src.tar.gz的代码,因为是mingw的软件,需要在mingw64.exe里编译,现在通过在线的方式安装依赖包,需要在/etc/pacman.d里配好源路径,至于为什么选择在线的方式,后续说明,首先安装依赖
pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-gcc-ada mingw-w64-x86_64-binutils mingw-w64-x86_64-crt mingw-w64-x86_64-headers mingw-w64-x86_64-isl mingw-w64-x86_64-windows-default-manifest mingw-w64-x86_64-winpthreads

出现了如下莫名奇妙的错误

错误:mingw64: 密钥 "4A6129F4E4B84AE46ED7F635628F528CF3053E04" 未知
错误:无法远程查找到密钥 "4A6129F4E4B84AE46ED7F635628F528CF3053E04"
错误:msys: 密钥 "4A6129F4E4B84AE46ED7F635628F528CF3053E04" 未知
错误:无法远程查找到密钥 "4A6129F4E4B84AE46ED7F635628F528CF3053E04"
错误:数据库 'mingw64' 无效 (无效或已损坏的数据库 (PGP 签名))
错误:数据库 'msys' 无效 (无效或已损坏的数据库 (PGP 签名))

这个错误,下面这篇文章可以完全解决
解决msys2“无法升级 mingw64 (无效或已损坏的数据库 (PGP 签名))”密钥失效问题

解决后依赖就可以装上了,然后进入到mingw-w64-gcc-7.4.0-1源码目录,执行
makepkg --skippgpcheck
出现这个错误

# makepkg --skippgpcheck
==> 正在创建软件包:mingw-w64-gcc 7.4.0-1 (2020年10月24日 13:51:08)
==> 正在检查运行时依赖关系...
==> 正在检查编译时依赖关系
==> 缺少依赖关系:-> mingw-w64-x86_64-gcc-> mingw-w64-x86_64-gcc-ada-> mingw-w64-x86_64-binutils-> mingw-w64-x86_64-crt-> mingw-w64-x86_64-headers-> mingw-w64-x86_64-isl-> mingw-w64-x86_64-windows-default-manifest-> mingw-w64-x86_64-winpthreads
==> 错误: 无法解决所有的依赖关系。

安装相关的依赖再编译,还是没成功,报的这个莫名奇妙错误

x86_64-w64-mingw32-gcc -c -g  -gnatp -gnatws -nostdinc -I- -I. -Iada/generated -Iada -I../../gcc-7.4.0/gcc/ada -I../../gcc-7.4.0/gcc/ada/gcc-interface \ada/b_gnat1.adb -o ada/b_gnat1.o
In file included from ../../gcc-7.4.0/gcc/system.h:691,from ../../gcc-7.4.0/gcc/read-rtl.c:31:
../../gcc-7.4.0/gcc/read-rtl.c: In member function 'const char* md_reader::apply_iterator_to_string(const char*)':
../../gcc-7.4.0/gcc/../include/libiberty.h:727:33: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]727 |    char *const libiberty_nptr = (char *const) alloca (libiberty_len); \|                                 ^
../../gcc-7.4.0/gcc/read-rtl.c:380:21: note: in expansion of macro 'ASTRDUP'380 |   base = p = copy = ASTRDUP (string);|                     ^~~~~~~
b_gnat1.adb:174:79: "SS_Stack" not declared in "Secondary_Stack"
b_gnat1.adb:174:89: incorrect constraint for this kind of type
b_gnat1.adb:269:56: "Runtime_Default_Sec_Stack_Size" not declared in "Parameters"
make[3]: *** [../../gcc-7.4.0/gcc/ada/gcc-interface/Make-lang.in:949:ada/b_gnat1.o] 错误 1
make[3]: *** 正在等待未完成的任务....
rm gcc.pod
make[3]: 离开目录“/d/d/msys2package/source/mingw-w64-gcc-7.4.0-1/src/build-x86_64-w64-mingw32/gcc”
make[2]: *** [Makefile:4549:all-stage1-gcc] 错误 2
make[2]: 离开目录“/d/d/msys2package/source/mingw-w64-gcc-7.4.0-1/src/build-x86_64-w64-mingw32”
make[1]: *** [Makefile:22283:stage1-bubble] 错误 2
make[1]: 离开目录“/d/d/msys2package/source/mingw-w64-

换了mingw原版的编译器也是这个错误,看来可能还少什么库没安装,这个问题暂时不管了,至少msys2的gcc是能编成功的。

4. gtk3源码编译

源码包是mingw-w64-gtk3-3.22.30-1.src.tar.gz,出现如下错误

# makepkg --skippgpcheck
==> 错误: 文件 install (gtk3-x86_64.install) 不存在,或者不是一个常规文件。

把gtk3-i686.install改为gtk3-x86_64.install,并把里面的mingw32替换为mingw64

编译器需要改成mingw-w64-x86_64-gcc 8.3.0-2,msys2的编译器无法成功

先安装相关依赖
pacman -S mingw-w64-x86_64-adwaita-icon-theme mingw-w64-x86_64-atk mingw-w64-x86_64-cairo mingw-w64-x86_64-gdk-pixbuf2 mingw-w64-x86_64-gdk-pixbuf2 mingw-w64-x86_64-glib2 mingw-w64-x86_64-json-glib mingw-w64-x86_64-libepoxy mingw-w64-x86_64-pango mingw-w64-x86_64-shared-mime-info mingw-w64-x86_64-pkg-config mingw-w64-x86_64-gtk-doc mingw-w64-x86_64-gobject-introspection autoconf automake libtool

再makepkg --skippgpcheck,目前已编译通过。

5. 重新开始

之前包我是从网页上一个一个下下来的,其实有更快速的方法:

pacman -Sw 包名

下的包可以在/var/cache/pacman/pkg/里找到。

安装时也不用把依赖一个个都装过去,把/etc/apcman.d里的源路径改为本地路径,类似Server = file:///home/custompkgs这样的,然后就会自动安装依赖。

下面是我自己记录的操作步骤:

1 .解压msys2-base-x86_64-20190524.tar文件

2.修改/etc/apcman.的源为本地文件夹

Server = file:///d/d/msys2package/all

3.安装gcc、make、gdb

pacman -U /d/d/msys2package/all/gcc-7.4.0-1-x86_64.pkg.tar.xz
pacman -U /d/d/msys2package/all/make-4.2-1-x86_64.pkg.tar.xz
pacman -U /d/d/msys2package/all/gdb-7.9-2-x86_64.pkg.tar.xz

4.复制msys-readline8.dll并重命名为msys-readline6.dll

5.编译gdb

安装依赖
pacman -U gettext-devel-0.19.8.1-1-x86_64.pkg.tar.xz libexpat-devel-2.2.6-1-x86_64.pkg.tar.xz libiconv-devel-1.15-1-x86_64.pkg.tar.xz liblzma-devel-5.2.4-1-x86_64.pkg.tar.xz libreadline-devel-8.0.000-1-x86_64.pkg.tar.xz ncurses-devel-6.1.20180908-1-x86_64.pkg.tar.xz zlib-devel-1.2.11-1-x86_64.pkg.tar.xz patch-2.7.6-1-x86_64.pkg.tar.xz python2-2.7.13-1-x86_64.pkg.tar.xz

进入源码目录
cd /d/d/msys2package/source/gdb-7.9-2

编译:makepkg --skippgpcheck
成功!!(最后check()报错不用管,只要build()成功生成可执行文件就可以了

6.编译gcc

修改PKGBUILD文件
#STRIP_OPTION=“strip”
STRIP_OPTION="!strip"
DEBUG_OPTION=“debug”
#DEBUG_OPTION="!debug"

安装依赖
pacman -U gmp-devel-6.1.2-1-x86_64.pkg.tar.xz mpc-devel-1.1.0-1-x86_64.pkg.tar.xz mpfr-devel-4.0.2-1-x86_64.pkg.tar.xz isl-devel-0.19-1-x86_64.pkg.tar.xz diffutils-3.5-1-x86_64.pkg.tar.xz

进入源码目录:cd /d/d/msys2package/source/gcc-7.3.0-1/
编译:makepkg --skippgpcheck
这次失败了,还是这个错误
mv: 无法将’gcc’ 移动至’stage1-gcc’: Permission denied

把PKGBUILD里的make改为make -j24就可以了,版本7.3,7.4,9.3都可以

成功!!
在这里插入图片描述

7.安装gtk

pacman -U /d/d/msys2package/all/mingw-w64-x86_64-gtk3-3.22.30-1-any.pkg.tar.xz

8. 编译gtk

安装mingw-gcc
pacman -U /d/d/msys2package/all/mingw-w64-x86_64-gcc-8.3.0-2-any.pkg.tar.xz

安装依赖
pacman -S mingw-w64-x86_64-adwaita-icon-theme mingw-w64-x86_64-atk mingw-w64-x86_64-cairo mingw-w64-x86_64-gdk-pixbuf2 mingw-w64-x86_64-gdk-pixbuf2 mingw-w64-x86_64-glib2 mingw-w64-x86_64-json-glib mingw-w64-x86_64-libepoxy mingw-w64-x86_64-pango mingw-w64-x86_64-shared-mime-info mingw-w64-x86_64-pkg-config mingw-w64-x86_64-gtk-doc mingw-w64-x86_64-gobject-introspection autoconf automake libtool

把gcc卸掉 ,再重新启动mingw64.exe,可以看到gcc版本变为mingw-gcc 8.3

进入mingw-w64-gtk3.22源码目录,编译makepkg --skippgpcheck

成功!!


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

相关文章

MSYS2的下载和安装

安装和下载步骤如下: 在官网上,先完成 Installation的第1、2、3、4步;在做第5步之前,即执行如下命令之前: $ pacman -Syu首先打开你的安装位置,比如安装在D:\msys64,进入目录D:\msys64\etc\pa…

msys2环境搭建

具体步骤 下载MSYS2:MSYS2安装MSYS2 安装 pacman -S make gcc diffutils pkg-config nasm 卸载 pacman -R make gcc diffutils pkg-config nasm 双击打开(包含常用工具链) pacman -Ss gcc 搜索gcc;pacman -S make gcc diffutils…

msys2常用配置

msys2常用配置 Windows安装msys2把msys2集成到Windows Terminal中pacman常用命令查询文件由哪个包提供 配置proxy配置http代理配置socks5代理使配置生效 msys2修改国内源常见问题msys2访问其他盘msys2安装tmux不间断会话---已不可用WIndows拷贝过来的密钥对无法使用msys2安装sc…

MSYS2 Windows软件分发和构建平台

MSYS2 Software Distribution and Building Platform for Windows MSYS2 Windows软件分发和构建平台 MSYS2 is a collection of tools and libraries providing you with an easy-to-use environment for building, installing and running native Windows software. MSYS2…

安装MSYS详细过程

系统环境 Windows 10 64bit 1.下载 msys2页面:https://www.msys2.org/ 安装程序:msys2-x86_64-20211130.exe 系统要求是64位的win7及以上的系统 2.安装 2.1 双击运行 注意安装文件夹只能是NTFS分区下短Ascii字符,不要有空格&#xff0c…

msys 的安装和使用

msys2是64位的版本: 可以参照北邮崔毅东的慕课:安装msys2的慕课 再贴一个寻找镜像的图: pacman重设镜像的方法:https://lug.ustc.edu.cn/wiki/mirrors/help/msys2 下面是关于 msys 32位的版本: msys 是一个运行在 win…

Mil学习之Msys

一、什么是Msys 以Msys为前缀的函数构成系统模块。系统模块支持系统的分配和查询。系统控件表示一个物理板,最常见的是一个成像帧捕获器。系统控件还允许您访问图形控制器和主机CPU。可以使用系统控件指定要访问的物理设备,并设置一些系统范围的设置。配…

介绍MSYS2 在windows下与使用

系列文章目录 文章目录 系列文章目录前言一、MSYS下载二、安装三、使用MSYS2安装CMake工具 前言 MSYS的独立改写版本 MSYS2 (Minimal SYStem 2) 是一个MSYS的独立改写版本,主要用于 shell 命令行开发环境。同时它也是一个在Cygwin &#xff…

MSYS2CmderWindows神器组合

1、Cmder 简介 Cmder简单来说是个多标签命令行工具,它可以当做windows自带的cmd的增强版,如图: 优势 支持多标签支持全屏显示可以方便的对命令行窗口的属性进行设置,比如字体,编码,颜色,背景…

步进电机与两线直流电机驱动

步进电机: 1.技术参数 四线四相,八拍驱动 2.驱动调试 一般频率在1.4k左右,每700us执行一拍 要注意驱动频率 遇到挑适配器的问题,功率低的适配器可能带不动步进电机 两线直流电机: 正转和反转两种状态 IO_A 1; …

回收直流电机驱动中的能量

回收直流电机驱动中的能量 当使永磁电机驱动器中的运动质量减速时,存储在机械系统中的能量可以通过电机驱动器返回到电源。如果没有正确考虑这种能量,它可能会导致电源电压升高,从而损坏电机驱动器或系统的其余部分。 当使永磁电机驱动器中的…

GC8870国产低成本替代TI的DRV8870 3.6A 刷式直流电机驱动器(PWM 控制)

GC8870是一款刷式直流电机驱动芯片,适用于打印机、电器、工业设备以及其他小型机器。两个逻辑输入控制 H 桥驱动器,该驱动器由四个NMOS组成,能够以高达3.6A 的峰值电流双向控制电机。利用电流衰减模式,可通过对输入进行脉宽调制 (…

GC8837 DFN8 12V直流电机驱动芯片 完美替代TI DRV8837

GC8837是一款12V直流电机驱动芯片,为摄像机、消费类产品、玩具和其他低压或者电池供电的运动控制类应用提供了集成的电机驱动解决方案。芯片一般用了驱动一个直流电机或者使用两颗来驱动步进电机。   GC8837可以工作在0~12V的电源电压上,能提供高达1.5…

51单片机(十五)直流电机驱动(PWM)

❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要…

GC3909 12V直流电机驱动芯片低成本替代allegro的A3909

GC3909是一款双通道12V直流电机驱动芯片,为摄像机、消费类产品、玩具和其他低压或者电池供电的运动控制类应用提供了集成的电机驱动解决方案。芯片一般用来驱动两个直流电机或者驱动一个步进电机。   GC3909可以工作在3.8~12V的电源电压上,每通道能提供…

[直流有刷电机步进电机]驱动芯片AS4950完美替代A4950/DRV8870/AT8870/TMI8870/G2057

大家好,我是芯知识学堂的SingleYork,今天要给大家分享的是AS4950这款直流有刷电机芯片的应用(控制直流电机和步进电机)。 AS4950 是一款具有优越性能的全桥 DMOS 直流有刷电机驱动芯片,最大工作范围可以撘3.5A 和 40V …

直流电机驱动(PWM)

直流电机介绍 直流电机是一种将电能转换为机械能的装置。一般的直流电机有两个电极,当电极正接时,电机正转,当电极反接时,电机反转 直流电机主要由永磁体(定子)、线圈(转子)和换向器…

直流电机驱动电路整理笔记

—— 博文内容是从好几篇论文中摘抄下来的,不过遗憾的是那时候我没有对这几篇论文进行来源记录。 1基础知识 1.1专业名词 本小节用于阐述本文将提到的专业名词。 逻辑电压:用于表示逻辑的高电平或低电平,驱动能力很弱 驱动电压&#xff1a…

直流电机驱动PWM

正接时正转,反接时反转 IN为低电平时,三极管导通 IN为高电平时,三极管断开 P10口如果给1,就为0 主循环写法 while(1) {for(Time0;Time<100;Time){for(i0;i<20;i){LED0;Delay(Time);//亮的时间LED1;Delay(100-Time);//暗的时间}} } #include <REGX52.H> sbit …

DRV8711的通用步进电机驱动器和直流电机驱动器

DRV8711的通用步进电机驱动器和直流电机驱动器 芯片说明 DRV8711 是一款步进式电机控制器&#xff0c;此控制器使用外部 N 通道 MOSFET 来驱动一个双极步进式电机或两个有刷直流电机。 集成了一个微步进分度器&#xff0c;此分度器能够支持全步长至 1/256 步长的步进模式。 通…