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_64i686),找到名為 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】官方文檔鏈接請點擊此處

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM