MSYS2 学习使用日记
过去几年一直使用的是msys,用起来很累(主要平时用的少,懂的少,菜鸟一个),最近为了编译64位的库接触了msys2,感觉编译起来轻松多了。
以前我在使用msys的时候,很多与编译相关的的工具我都是进入各自不同的官网下载,然后手动安装。还要手动去配置一些路径。我不清楚msys有没有全自动功能。
我用了一下msys2,哎呦我去,几个命令就自动把常用的工具给下载安装好,配置好了,这就省心多了。
-------------------------------------------------------------------------------------------------------------------------------------
1. 下载 msys2(64位): https://www.msys2.org/
下载 msys2(32位):http://repo.msys2.org/distrib/i686/ 来自 https://www.msys2.org/wiki/MSYS2-installation/
大陆下载太慢,只能通过阿里云香港下载会快一些。
另外,如果不想在本地32位系统编译源代码,可到服务端(64位系统),使用 mingw32_shell.bat 来编译生成 32 位的库。
安装后,生成三个 .bat 文件:
三个 .bat 的区别就是 PATH 的设置,
mingw32_shell.bat 优先使用 msys64\mingw32\ 下的工具,
mingw64_shell.bat 优先使用 msys64\mingw64\ 下的工具,
而 msys2_shell.bat 两个都不使用,只用自身 msys 的工具。
这么做的好处是当需要编译 32bit Target 的项目时使用 mingw32_shell.bat,64 bit 使用 mingw64_shell.bat,各套工具互不干扰。
---------------------------------------------------------------------------------
2. 参考:在windows上安装配置msys2 https://blog.csdn.net/hustlei/article/details/86687588
打开文件夹 C:\msys64\etc\pacman.d
用【记事本】编辑:mirrorlist.mingw32
Server = http://mirrors.ustc.edu.cn/msys2/mingw/i686/
Server = http://mirror.bit.edu.cn/msys2/mingw/i686/
Server = http://repo.msys2.org/mingw/i686/
Server = http://downloads.sourceforge.net/project/msys2/REPOS/MINGW/i686/
Server = http://www2.futureware.at/~nickoe/msys2-mirror/i686/
用【记事本】编辑:mirrorlist.mingw64
Server = http://mirrors.ustc.edu.cn/msys2/mingw/x86_64/
Server = http://mirror.bit.edu.cn/msys2/mingw/x86_64/
Server = http://repo.msys2.org/mingw/x86_64/
Server = http://downloads.sourceforge.net/project/msys2/REPOS/MINGW/x86_64/
Server = http://www2.futureware.at/~nickoe/msys2-mirror/x86_64/
Server = http://mirror.bit.edu.cn/msys2/REPOS/
用【记事本】编辑:mirrorlist.msys
Server = http://mirrors.ustc.edu.cn/msys2/msys/$arch/
Server = http://mirror.bit.edu.cn/msys2/msys/$arch/
Server = http://repo.msys2.org/msys/$arch/
Server = http://downloads.sourceforge.net/project/msys2/REPOS/MSYS2/$arch/
Server = http://www2.futureware.at/~nickoe/msys2-mirror/msys/$arch/
3. 安装 mingw-w64: 参考:https://blog.csdn.net/cainiao1412/article/details/106424106
pacman -Sl | grep gcc # 查找可用的GCC包
#安装 64位 gcc
pacman -S mingw-w64-x86_64-gcc #MSYS2 会自动将这个包装在 msys64/mingw64/ 下,从之前的分析可知只有 mingw64_shell.bat 会用到这个目录下的程序。
#安装 32位 gcc
#pacman -S mingw-w64-i686-gcc #MSYS2 会自动将这个包装在 msys64/mingw32/ 下,从之前的分析可知只有 mingw32_shell.bat 会用到这个目录下的程序。
gcc -v 查看当前安装的版本号 --> 我这边显示的结果是: gcc version 10.2.0 (Rev5, Built by MSYS2 project)
--------------------------------
注意:2021-8-14 在一台新电脑上,运行 pacman -S mingw-w64-x86_64-gcc
:: 正在获取软件包......
错误:无法从 mirrors.tuna.tsinghua.edu.cn : The requested URL returned error: 404 获取文件 'mingw-w64-x86_64-libiconv-1.16-1-any.pkg.tar.xz'
错误:无法从 mirrors.ustc.edu.cn : The requested URL returned error: 404 获取文件 'mingw-w64-x86_64-libiconv-1.16-1-any.pkg.tar.xz'
错误:无法从 mirror.bit.edu.cn : Could not resolve host: mirror.bit.edu.cn 获取文件 'mingw-w64-x86_64-libiconv-1.16-1-any.pkg.tar.xz'
错误:无法从 repo.msys2.org : The requested URL returned error: 404 获取文件 'mingw-w64-x86_64-libiconv-1.16-1-any.pkg.tar.xz'
错误:无法从 downloads.sourceforge.net : The requested URL returned error: 404 获取文件 'mingw-w64-x86_64-libiconv-1.16-1-any.pkg.tar.xz'
错误:无法从 www2.futureware.at : The requested URL returned error: 404 获取文件 'mingw-w64-x86_64-libiconv-1.16-1-any.pkg.tar.xz'
错误:无法从 mirror.bit.edu.cn : Could not resolve host: mirror.bit.edu.cn 获取文件 'mingw-w64-x86_64-libiconv-1.16-1-any.pkg.tar.xz'
警告:无法获取某些文件
错误:无法从 mirrors.tuna.tsinghua.edu.cn : The requested URL returned error: 404 获取文件 'mingw-w64-x86_64-zlib-1.2.11-7-any.pkg.tar.xz'
错误:无法从 mirrors.ustc.edu.cn : The requested URL returned error: 404 获取文件 'mingw-w64-x86_64-zlib-1.2.11-7-any.pkg.tar.xz'
错误:无法从 mirror.bit.edu.cn : Could not resolve host: mirror.bit.edu.cn 获取文件 'mingw-w64-x86_64-zlib-1.2.11-7-any.pkg.tar.xz'
错误:无法从 repo.msys2.org : The requested URL returned error: 404 获取文件 'mingw-w64-x86_64-zlib-1.2.11-7-any.pkg.tar.xz'
错误:无法从 downloads.sourceforge.net : The requested URL returned error: 404 获取文件 'mingw-w64-x86_64-zlib-1.2.11-7-any.pkg.tar.xz'
错误:无法从 www2.futureware.at : The requested URL returned error: 404 获取文件 'mingw-w64-x86_64-zlib-1.2.11-7-any.pkg.tar.xz'
错误:无法从 mirror.bit.edu.cn : Could not resolve host: mirror.bit.edu.cn 获取文件 'mingw-w64-x86_64-zlib-1.2.11-7-any.pkg.tar.xz'
警告:无法获取某些文件
错误:无法提交处理 (无效的服务器 url)
发生错误,没有软件包被更新。
---
百度了一下,找到解决方案:https://blog.csdn.net/weixin_43833642/article/details/104335594
解决方案
更新本地数据库,同步源
pacman -Sy
--------------------------------
pacman -Ss yasm #查找 yasm 相关的可用包
pacman -Ss nasm #查找 nasm 相关的可用包
pacman -Ss make #查找 make 相关的可用包
--------------------------------
4. 安装其他常用工具, 参考:https://blog.csdn.net/afei198409/article/details/88560411
pacman -S base-devel 这个安装的是32位还是64位,我没搞清楚。
pacman -S yasm #安装 yasm
pacman -S nasm #安装 nasm
pacman -S make #安装 make
测试发现:yasm, nasm, make 全都安装在 C:\msys64\usr\bin, 全都是 64位 应用程序。
根据这个安装过程看,如果想安装 libpng 和 openssl 之类的库,只需要一条命令(pacman xxx)就完成了,很方便
--------------------------------------------------------------- 编译 pngquant-2.12.5
例如,编译 pngquant-2.12.5-src 的时候,需要 libpng 库:
./configure #在没有安装 libpng 库的时候, 会提示错误信息
Compiler: gcc
Debug: no
SSE: yes
OpenMP: no
imagequant: build static
libpng: error ... not found (try: `apt-get install libpng16-dev` or `apt-get install libpng-dev` or `yum install libpng-devel`)
pacman -Ss libpng # 列出所有提及libpng,前缀和全部的软件包
pacman -S mingw-w64-x86_64-libpng #安装 64位 libpng
#pacman -S mingw-w64-i686-libpng #安装 32位 libpng
./configure #再试一次
make
就完成了 pngquant-2.12.5-src 64位的编译
--------------------------------------------------------------- 编译 libiconv-1.16, 生成的库文件存放到 /usr/local/libiconv-1.16-x64
./configure --prefix=/usr/local/libiconv-1.16-x64
make
make install
--------------------------------------------------------------- 编译 pcre-8.35 与 pcre-8.44: https://www.cnblogs.com/personnel/p/4584972.html
./configure --disable-cpp --prefix=/local/pcre-8.35-x64
make
make install
--------------------------------------------------------------- 编译 openssl-1.1.1i
#默认编译得到的是静态库:
./config
make
make test
make install
#编译动态库,只需添加参数 shared 即可:
./config shared
make
make test
make install
---------------------------------------------------------------
注意:
目前所有32位的库都是在64位的系统上编译的, 如果在32位系统上无法使用这些库,就到 http://repo.msys2.org/distrib/i686/ 下载 32位的 msys2 在本地32位机器上重新编译一下。
--------------------------------
参考资料:http://www.360doc.com/content/16/0514/16/496343_559090195.shtml
查看可用的安装包pacman -Sl | grep gcc可以看到以下三个
mingw32 mingw-w64-i686-gcc 4.9.1-3
mingw64 mingw-64-x86_64-gcc 4.9.1-3
msys gcc 4.8.2-2
pacman -S mingw-w64-i686-gcc # MSYS2 会自动将这个包装在 msys64/mingw32 下,从之前的分析可知只有 mingw32_shell.bat 会用到这个目录下的程序。
安装 make
查找 make 相关的 make 工具
pacman -Sl |grep make
安装 MSYS2 的 make
pacman -S make
安装 Git
搜索 git
pacman -Sl |grep git
安装 MSYS2 的 git
pacman -S git
--------------------------------
参考资料:https://www.msys2.org/wiki/MSYS2-installation/
安装新软件包: pacman -S <package_names|package_groups>
例如,pacman -S make gettext base-devel 在本示例中是一个包含许多软件包的软件包组。
如果您尝试安装软件包组,Pacman会询问您是要从该组中安装一个软件包还是要从该组中安装所有软件包。
删除软件包: pacman -R <package_names|package_groups>
搜索软件包: pacman -Ss <name_pattern>
--------------------------------
MSYS2使用Pacman(从Arch Linux中获知)来管理其软件包,并带有三个不同的软件包存储库:
mingw64:包含64位本机Windows软件(与mingw-w64 x86_64工具链一起编译)
mingw32:包含32位本机Windows软件(与mingw-w64 i686工具链一起编译)
msys2: 包含依赖于MSYS2的软件