【教程】搭建 Windows 下基於 MSYS 的交叉編譯開發環境

本帖最後由 hackpascal 於 2013-10-7 17:520. 說明  本文適合那些想編譯用於 OpenWrt 軟體而又不想安裝 Linux 的童鞋。  如果想編譯 OpenWrt 本身,那麼還是請到 Linux 下進行。  MSYS 是一個模擬 Linux 下 Shell 環境的軟體,可以運行 Linux Shell,因此可以實現大部分的軟體編譯操作。MSYS 的運行速度要快於 CygWin。  目前我只製作了 mips 和 mipsel 的交叉編譯器,想要其他平台的編譯器,如 arm 的童鞋可以把你需要的架構和CPU型號,和用於 gcc 優化的 -march、-mtune、-mabi 參數回復給我。1. 安裝 MSYS 和 MinGW32  有兩種方法安裝 MSYS 和 MinGW32.  第一種是從 http://sourceforge.net/projects/mingw/ 下載 mingw-get-setup.exe,使用它可以同時安裝 MSYS 和 MinGW32,至於安裝過程請參考網上的教程。  第二種是使用我提供的軟體包,解壓後即可使用:    MSYS 和 MinGW32 都是使用 2013-10-07 下載的最新軟體包製作的,包含了所有的組件。    MSYS-1.0: http://pan.baidu.com/s/1CCicT    MinGW32-4.8.1:http://pan.baidu.com/s/1l7MOV    將 MSYS 解壓到任意位置即可;在任意分區根目錄建立 mingw 文件夾,然後將 MinGW32 解壓到其中(只是建議這樣,解壓到其他位置也行)。    然後用 UltraEdit 等軟體打開 MSYS 目錄下 etcfstab 文件,沒有則創建一個(注意:不能用記事本,因為它不支持 LF 換行符)。    在其中加入 "x:/mingw /mingw",不含引號,其中 x:/mingw 是 MinGW32 的位置,x 是盤符,要小寫,保存退出。    然後運行 MSYS 根目錄下的 msys.bat,第一次運行時第一行可能會出現一個 "sh: /etc/profile.d/S00-fixmount.sh: No such file or directory" 的錯誤,不用管它,下次打開就沒有了。    然後運行 "gcc -v" 命令(不含引號),如果出現類似於如圖所示的界面,即表示 MSYS 環境搭建完成。

2. 搭建交叉編譯環境  交叉編譯器:

平台 指令集/架構 ABI uClibc 版本 GCC 版本 Linux 內核版本 下載地址
mips mips32r2 o32 0.9.33.2 4.8.1 3.10.13 下載
mipsel mips32r2 o32 0.9.33.2 4.8.1 3.10.13 下載

  安裝方法:    在 MSYS 根目錄新建一文件夾,如 toolchain-mips,然後將交叉編譯器解壓到其中。    進入 MSYS 根目錄的 home<用戶名> 文件夾。如果沒有,請運行一次 msys.bat。<用戶名> 為你當前登錄 Windows 的用戶名。    新建 ".profile" 文件(不含引號)。在其中輸入

  1. export PATH=$PATH:/toolchain-mips/bin

複製代碼其中 /toolchain-mips 是存放工具鏈的位置。    保存。    然後在 MSYS 中運行 "mips-linux-gcc -v" 命令(不含引號,名稱視具體的編譯器而定),如果出現交叉編譯器的版本信息,則交叉編譯環境搭建成功。3. MSYS 的使用  MSYS 就是一個小型的 Linux 環境,因此其用法和在 Linux 下的相同,只是它是精簡版的。MSYS 使用的解釋器是 bash。    1. 編譯標準的帶 configure 的代碼    這個是標準的編譯三部曲,但是在交叉編譯時 configure 要帶上交叉編譯參數

  1. ./configure --host=mips-linux-uclibc CC=mips-linux-gcc CXX=mips-linux-g++ CFLAGS="-march=mips32r2 -mtune=mips32r2" CXXFLAGS=... CPPFLAGS=...
  2. make
  3. make install DESTDIR=/soft

複製代碼a) 如果編譯成本機運行的代碼,那麼 configure 的 --host 參數和 CC、CXX、CFLAGS、CXXFLAGS、CPPFLAGS 就不需要了    b) make install 的 DESTDIR 指定軟體的安裝位置    c) -march 指定生產特定指令集的文件, -mtune 指定特定指令集的優化。使用這兩個參數視情況而定。  2. 編譯只含有 Makefile 的代碼

  1. make CC=mips-linux-gcc CXX=mips-linux-g++ CFLAGS="-march=mips32r2 -mtune=mips32r2" CXXFLAGS=... CPPFLAGS=...

複製代碼a) 有些代碼在指定 CFLAGS、CXXFLAGS 後會導致編譯失敗,這是因為 make 時指定的 CFLAGS 會覆蓋 Makefile 中的 CFLAGS 變數,這種情況下請直接修改 Makefile 文件。    b) 有些代碼在指定 CC、CXX 後依然使用本機的 gcc.exe、g++.exe,這是因為代碼的 Makefile 裡面已經定義了 CC、CXX 等變數,須將其修改後再編譯。  3. 編譯使用 CMake 的代碼    這個要複雜點,如果英文好,可以參考官方文檔 http://www.cmake.org/Wiki/CMake_Cross_Compiling。    中文的請自行百度。。。    提供一些鏈接:      http://hi.baidu.com/craycoker/item/677a7425c5bc7f44469962c2      http://robocup.bowdoin.edu/public/software/nao/NaoQi/1.10/nao-1.10/doc/site_ch/reddoc/sdk/using_cmake.html      http://www.myexception.cn/program/1402501.html  4. 編譯 U-Boot    U-Boot 可以在 MSYS 環境下編譯,但需要對代碼(tools 目錄下的代碼、根目錄下的 Makefile 和 mkconfig)做一些修改。    這個以後單獨發個帖子。4. MSYS 下的一些工具  以下工具都可以直接解壓到 MSYS 根目錄後使用。如果提示文件重複,那麼覆蓋即可。

工具名 版本 下載地址
Git (msysGit,不含 bash) 1.8.4 下載
Subversion (SVN for Win) 1.8.3 下載
CMake 2.8.11.2 下載

  以下工具來自於其官網,可能需要安裝

工具名 下載地址
GTK+,用於 make gconfig 命令。下載「all-in-one bundle」,直接解壓到 MSYS 目錄 官方頁面

5. 已知問題  1. 無法運行 make menuconfig 命令,因為沒有可用於 MSYS 下的 ncurses 庫。  2. 如果軟體包下有 INSTALL 文件,請將其刪除,否在在執行 make install 命令時會出錯。  3. 有時候 MSYS 會出現無法顯示文字的情況,遇到這種情況時請重新打開 MSYS。  4. 在 MSYS 下編譯的 U-Boot 體積可能會變大 3~4KB。

推薦閱讀:

如何使用MSYS2
如何評價msys2?

TAG:環境 | 編譯 | 教程 | Windows | 開發環境 | MSYS |