|
本帖最後由 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" 文件(不含引號)。在其中輸入
- export PATH=$PATH:/toolchain-mips/bin
複製代碼其中 /toolchain-mips 是存放工具鏈的位置。 保存。 然後在 MSYS 中運行 "mips-linux-gcc -v" 命令(不含引號,名稱視具體的編譯器而定),如果出現交叉編譯器的版本信息,則交叉編譯環境搭建成功。3. MSYS 的使用 MSYS 就是一個小型的 Linux 環境,因此其用法和在 Linux 下的相同,只是它是精簡版的。MSYS 使用的解釋器是 bash。 1. 編譯標準的帶 configure 的代碼 這個是標準的編譯三部曲,但是在交叉編譯時 configure 要帶上交叉編譯參數
- ./configure --host=mips-linux-uclibc CC=mips-linux-gcc CXX=mips-linux-g++ CFLAGS="-march=mips32r2 -mtune=mips32r2" CXXFLAGS=... CPPFLAGS=...
- make
- make install DESTDIR=/soft
複製代碼a) 如果編譯成本機運行的代碼,那麼 configure 的 --host 參數和 CC、CXX、CFLAGS、CXXFLAGS、CPPFLAGS 就不需要了 b) make install 的 DESTDIR 指定軟體的安裝位置 c) -march 指定生產特定指令集的文件, -mtune 指定特定指令集的優化。使用這兩個參數視情況而定。 2. 編譯只含有 Makefile 的代碼
- 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 |