Msys+Mingw在手 妙用在心!

1 缘起

  平时在一些c++群面,看见很多大学十分努力的学习c++/MFC ,看见在编程语言百花争芳的时候,C/C++还是很有很有魅力。估计很多初学者使用都是window下的visual stdio 开发工具。 通过这篇文章可以其他的编译C++工具,融合linux和windows c++开发的能力。

这么多年来从事过window/linux下c/c++开发,对平时的使用过的开发工具,做一个回顾总结 ,主要介绍Msys+Mingw的工具简单使用和在Linux交叉编译win下程序。下面就引出本文要提到的明星Msys+Mingw

2 在window下如何查看实时log文件尾部追加内容?

  开发实际项目,肯定必须有一个log文件,来输出些日志信息,这样开发人员可以通过log寻找bugs.

  现在开发语言都提供现成类,输出日志。

  那如何在window平台下查看这种实时递增的日记?

用文本编辑器 world 打开太麻烦了,并且不方便查看尾部追加内容。

怎么办呢?

解决过linux/unix 的朋友就会想到 ,如果有tail 命令就好了,一个tail -f /var/log/a.log 就可以查看日志实时的增量。

所以的明星登场了

3 msys+mingw  window平台下崇尚gnu精神的实践者.

下面看一看baidu 百科是怎么介绍  http://baike.baidu.com/view/371287.htm?fr=aladdin

Minimal GNU(POSIX)system on Windows,是一个小型的GNU环境,包括基本的bash,make等等。是Windows下最优秀的GNU环境。(是否厌倦了Cygwin蜗牛般的shell环境,试试MSYS中的rxvt)

MinGW:即Minimalist GNU for Windows。它是一些头文件和函数库的集合,该集合允许人们在没有第三方动态链接库的情况下使用GCC(GNU Compiler C)产生Win32程序。

MinGW主要由GNU binary utilities、GCC和GDB组成。同时还包括一些必要的库,例如libc(C Runtime),及专门用于Win32环境的API接口库。如果你想学习linux环境下的编程,而又不想装linux,那你就装一个MinGW吧。

 有了Msys+Mingw,我们就可以在window,就可以学习GCC编程,一致linux下程序到window了.

百科也把Msys+Mingw的“堂哥Cygwin”缺点说了一下,在Msys+Mingw还没有流行的时候,大家都使用Cygwin. 只能感叹"青出于蓝 胜于蓝" ,Cygwin已经不是“当年的小甜甜” ,变成了“牛大嫂”

4 安装msys+mingw 很简单,一键安装.

  直接去Mingw的网站 http://www.mingw.org/,在左侧导航点击download 就到跳转到sourceforge.net  下载mingw-get-setup.exe (86.5 kB)

  选择msys-base, mingw32-base, mingw-developer-toolkit,mingw-gcc-g++包,进行安装

 

默认的安装路径C:\MinGW,  进入C:\MinGW\msys\1.0中 ,给msys 创建桌面的快捷方式.

点击桌面msys 图标 ,开始进入msys之旅。

5 有图有真相 -- tail 检测文件尾部的追加内容

  在msys中 访问C盘使用/c/ , D盘使用/d/, 其他磁盘,亦复如是。

下面演示 使用tail 命令检查D:/test.log 文件尾增量内容,同时使用 echo 向文件追加内容。

的确是大家期待的那样!!!

以后再有实时查看window平台下程序文本log的场景,大家成竹在胸了。。

6  给Msys添加左膀wget  "镜像网站不求人"

大家可以baidu下wget ,简单说是linux平台下载文件的程序,应用比较广。

本节演示在Msys中怎么编译,在window平台就可以镜像个网站,不用求助第三方软件了。

首先下载wget-1.15.tar.gz.    下载后拷贝C:\MinGW\msys\1.0\home中。

这样一如就像在Linux 编译程序一样,等一会就就编译完了。 下面就是wget大显身手的时候--镜像网站了

cd  ; wget.exe  -r -p -np -k http://www.xiulian.com/XMZHF/xmzf-index.htm
-r 表示递归下载,会下载所有的链接,不过要注意的是,不要单独使用这个参数,因为如果你要下载的网站也有别的网站的链接,wget也会把别的网站的东西下载下来,所以要加上-np这个参数,表示不下载别的站点的链接.
-np 表示不下载别的站点的链接.
-k 表示将下载的网页里的链接修改为本地链接.
-p 获得所有显示网页所需的元素,比如图片什么的.
-E  或 --html-extension   将保存的URL的文件后缀名设定为“.html”

下载过程日志找图,生存镜像的网址目录 www.xiulian.com 以及相应的目录。

大家是不是已经感觉到开源的伟大,以后在镜像个网页,wget 就搞定,再不用那些收费软件,或者老弹广告的软件

有msys+mingw,linux下的好多软件,就可以编译,讲给你的window平台插上”翅膀“。

不过大家可能感觉到 用msys编译的软件比较慢,不在像在linux编译软件快!

下面就介绍个本最后一个玩法。

7 ”独家玩法“-mingw-w64  在linux编译win32/win64 软件

首先介绍下环境,我用的是debian7.3系统,运行的virtualbox虚拟机中.

其次介绍mingw-w64 有2个版本的编译器

g++-mingw-w64-i686   - GNU C++ compiler for MinGW-w64 targeting Win32  --生成32位程序
      g++-mingw-w64-x86-64  - GNU C++ compiler for MinGW-w64 targeting Win64  -- 生成64位程序     

在debian下 我选择是生成32位程序的g++-mingw-w64-i686,使用apt-get 命令安装起来很简单。

apt-get install binutils-mingw-w64-i686 g++-mingw-w64-i686 mingw-w64-i686-dev mingw-w64-tools

新建helloword.cpp 文件代码如下

#include<cstdio>
#include<cstdlib>
#include<iostream>

int main(int argc ,char* argv[])
{
        std::cout << "compile hello world.exe by linux and i686-w64-mingw32-g++\n";
        system("PAUSE") ;
        return 0;
}

编译程序  

    i686-w64-mingw32-g++  hellword.cpp -o helloword.exe

    将linux编译好的helloword.exe  弄到window 运行

是真的。人格担保。。

有的看官感觉这太简单了,不过瘾!

8  杀手锏展示 用linux下的mingw 交叉编译出运行在window平台的wget

下载wget源码,解压同6节。执行下面几个命令,就可以编译出wget.exe

export CC=i686-w64-mingw32-gcc
   export RANLIB=i686-w64-mingw32-ranlib
       export LIBS=-lpthread
   ./configure --host=mingw32 --without-ssl --disable-ipv6

make

下载wget.exe 到window 桌面,运行起来来个截图,

9 小结

前面介绍关于mingw+msys ,一些简单用法, 有需求有兴趣的可以玩一玩,的确能够让window下c++/C 开发者眼睛一亮。。有所顿悟。

非常流行媒体的播放器VLC社区,就使用linux 下mingw 交叉编译出运行在window下VLC,这也是大家越来越喜欢用Mingw的原因之一。

如果有任何疑惑,请在这里联系我,多踩踩帖!

                       

Msys+Mingw在手 妙用在心!,布布扣,bubuko.com

时间: 2024-10-05 11:15:13

Msys+Mingw在手 妙用在心!的相关文章

Msys/MinGW与Cygwin/gcc

本文转自:http://www.lupaworld.com/273398/viewspace-122539.html 一. MinGW MinGW 官方网站为 http://www.mingw.org/ MinGW,即 Minimalist GNU For Windows(GCC compiler suite).它是一些头文件和端口库的集合,该集合允许人们在没有第三方动态链接库的情况下使用 GCC(GNU Compiler C)产生 Windows32 程序. MinGW: 一个可自由使用和自由

Cygwin 与 MinGW/MSYS/MSYS2,如何选择?

本文链接:http://zengrong.net/post/1557.htm 什么是Cygwin和MinGW?请看这篇:Msys/MinGW与Cygwin/gcc. 在无法完全转换到Linux系统的前提下,我一直在 Cygwin 下工作,使用全套的Linux移植工具,学习Bash编程. 但Cygwin由于工作在模拟模式下,速度较慢,相比而言, MinGW 就要快不少. 下面是我选择的对比: 特点 Cygwin MinGW/MSYS MSYS2 是否GNU 否 是 是 更多软件支持? 支持绝大多数

windows 下使用 MinGW + msys 编译 ffmpeg

本文参考了网络上的不少文章,但由于版本环境的问题参考文章并不能直接指导编译,本文吸收多方经验,并在自己多次编译实验的基础上写成,欢迎转载,请注名出处.    FFmpeg是在Linux平台下开发的,但它同样可以在其它操作系统环境中编译运行,本文介绍的就是在windows下编译FFmpeg.一 编译准备    您最好新建一个目录专门用来保存以下下载的文件.1 下载 MinGW 和 MSYS    MinGW(Minimalist GNU on Windows):一个可自由使用和自由发布的Windo

MSVC vs. MinGW 之dll玩转攻略手记[转]

一份粗糙的研究记录,有待补完和整理. MinGW:c -> o           gcc -c a.cc -> exe         gcc a.c libs.o -o a.exe (从主程序a.c,附加libs,生成a.exe)o -> exe         gcc a.o b.o ... -o main.exec -> dll,def,a   gcc a.c -shared -o a.dll -Wl,--output-def,a.def,--out-implib,liba

MinGW 使用 msvcr90.dll

MinGW 编译出来的程序总是使用 VC6 的 msvcrt.dll ,VC8,9,10有很多新的API(仅限于c runtime),想使用怎么办? 比如:boost 对 MinGW 最低要求就是 msvcrt 7.0   1.MinGW 系统默认情况 MinGW 根据宏 MSVCRT_VERSION 来选择 msvcr 版本,如果用户未指定则默认使用 VC7 的 API(bug, MinGW 默认链接的是 msvcrt.dll, 虽然与 msvcr70.dll 差别不是太大)   MinGW

文件转换dll mingw

MinGW:c -> o           gcc -c a.cc -> exe         gcc a.c libs.o -o a.exe (从主程序a.c,附加libs,生成a.exe)o -> exe         gcc a.o b.o ... -o main.exec -> dll,def,a   gcc a.c -shared -o a.dll -Wl,--output-def,a.def,--out-implib,liba.aa -> dll      

msys + mintty

最近需要频繁的使用msys+mingw.下面是我从sourceforge上下载的“Personal Builds”: Mingw64:   mingw64-x86_64-4.9.2-release-win32-seh-rt_v4-rev3.7z Msys:      msys+7za+wget+svn+git+mercurial+cvs-rev13.7z msys.bat 默认使用的 terminal 是sh.exe,功能有限,用久了还挺不方便的: line buffer 很小,看不到以前的cm

MinGW 使用 mintty 终端替代默认终端以解决界面上复制与粘贴的问题

使用了一段时间的 cygwin,挺开心的,又尝试了下同类工具 Msys + MinGW,安装好之后发现它居然使用默认的 cmd 作为终端,界面输出的复制与粘贴极其不便,我记得 Cygwin 使用的是 mintty 的终端,没有这个不便,于是打开 msys.bat 瞧了一眼,发现下面这段文本 这说明 MinGW 是可以使用 mintty 终端的,内心一喜,立即更换,先给它下载安装 mintty 终端: mingw-get install mintty 安装之后,需要在给 msys.bat 所建的桌

在Windows下编译ffmpeg完全手册

本文的内容几乎全部来自于FFmpeg on Windows,但是由于国内的网络封锁,很难访问这个域名下的内容,因此我一方面按照我自己的理解和实践做了翻译,另一方面也是为了能提供一个方便的参考方法. 注: 1.       对于compile和build这两个词,本文统一的使用编译这个词,根据上下文读者应能区分语义上的差别. 本文的目的是提供一切与FFmpeg在Windows下的相关帮助.它最初是一个针对用MSys+MinGW系统编译的手把手的教程,现在也增加了如何在你的项目中链接FFmpeg所产