打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
【教程】搭建 Windows 下基于 MSYS 的交叉编译开发环境


本帖最后由 hackpascal 于 2013-10-7 17:52 

0. 说明
  本文适合那些想编译用于 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 目录下 etc\fstab 文件,没有则创建一个(注意:不能用记事本,因为它不支持 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。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
mt2523 使用MSYS2代替MSYS1.0,优化 Windows下的mingw编译
利用Eclipse CDT建立 windows下面C++开发环境
GCC 64位程序的makefile条件编译心得——32位版与64位版、debug版与re...
这或许是学习Linux下C编程的基础
调整gcc CPU参数优化代码编译 | Linux运维笔记
Linux编译安装中configure、make和make install各自的作用
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服