Windows configure mingw
//copy 自这两个博客 如有侵权,请联系作者删除
{
//https://blog.csdn.net/pfysw/article/details/109247846
//https://blog.csdn.net/xfijun/article/details/107810097
}
{
MSYS2 镜像使用帮助
收录架构
- MINGW: i686, x86_64
- MSYS: i686, x86_64
安装
请访问该镜像目录下的 distrib/
目录(x86_64 、i686),找到名为 msys2-<架构>-<日期>.exe
的文件(如 msys2-x86_64-20141113.exe
),下载安装即可。
pacman 的配置
编辑 /etc/pacman.d/mirrorlist.mingw32
,在文件开头添加:
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686
编辑 /etc/pacman.d/mirrorlist.mingw64
,在文件开头添加:
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64
编辑 /etc/pacman.d/mirrorlist.msys
,在文件开头添加:
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch
然后执行 pacman -Sy
刷新软件包数据即可。
注: 本Help参考自USTC镜像
}
{
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
- 1
出现下列窗口
先按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
- 1
接下来装make
pacman -U make-4.2-1-x86_64.pkg.tar.xz
- 1
接下来装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
- 1
这样gdb可以用了,但是此后使用pacman命令会出现了下面这个错误
错误:GPGME 错误:无效的加密引擎
错误:GPGME 错误:无效的加密引擎
错误:GPGME 错误:无效的加密引擎
错误:数据库 'mingw32' 无效 (无效或已损坏的数据库 (PGP 签名))
错误:数据库 'mingw64' 无效 (无效或已损坏的数据库 (PGP 签名))
错误:数据库 'msys' 无效 (无效或已损坏的数据库 (PGP 签名))
- 1
- 2
- 3
- 4
- 5
- 6
- 7
这个问题是不可逆,仔细想一下,原始包里的是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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
有的电脑行,有的电脑死活不行,但是不管怎么样,反正都在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 签名))
- 1
- 2
- 3
- 4
- 5
- 6
这个错误,下面这篇文章可以完全解决
解决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
==> 错误: 无法解决所有的依赖关系。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
安装相关的依赖再编译,还是没成功,报的这个莫名奇妙错误
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-
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
换了mingw原版的编译器也是这个错误,看来可能还少什么库没安装,这个问题暂时不管了,至少msys2的gcc是能编成功的。
4. gtk3源码编译
源码包是mingw-w64-gtk3-3.22.30-1.src.tar.gz,出现如下错误
# makepkg --skippgpcheck
==> 错误: 文件 install (gtk3-x86_64.install) 不存在,或者不是一个常规文件。
- 1
- 2
把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 包名
- 1
下的包可以在/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
- 1
- 2
- 3
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
成功!!
}
{
解决msys2“无法升级 mingw64 (无效或已损坏的数据库 (PGP 签名))”密钥失效问题
}
{
问题描述:
\qquad 最近在使用msys2的时候,发现无法使用pacman -Syu
进行更新,会出现如下提示:
\qquad
\qquad
原因是密钥无法信赖(rely
on)msys2-keyring密钥服务器,如果不及时更新msys2-keyring,就会出现上面的错误提示。msys2官方提供了一个msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz的软件包来修复。
\qquad
下载安装该软件包之前,无法通过验证:
\qquad
# pacman-key --verify msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz{.sig,}
\qquad
解决方法
\textbf{解决方法}
解决方法:
1. 下载 msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz 软件包
\qquad
# curl -O http://repo.msys2.org/msys/x86_64/msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz
\qquad
# curl -O http://repo.msys2.org/msys/x86_64/msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz.sig
\qquad
2.验证签名是否建立完好
\qquad
# pacman-key --verify msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz{.sig,}
\qquad
3.安装 msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz 包
\qquad
# pacman -U --config <(echo) msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz
\qquad
\quad 如果碰到下面的情况,可以按照提示,删掉\msys64\var\lib\pacman\中的db.lck文件即可,再重复上面的指令
\quad
4.然后就可以使用pacman -Syu
进行更新
\qquad
【注1】如果还存在签名问题导致无法更新,可以尝试重置pacman key:
# rm -r /etc/pacman.d/gnupg/
# pacman-key --init
# pacman-key --populate msys2
然后再pacman -Syu
进行更新
【注2】修复完毕后,可能需要重启计算机。
更新完毕之后,终于无事可做了
\qquad
【注3】官方文档链接请点击此处。
}